Я работаю над приложением для Mac и iOS с iCloud CoreData между ними для синхронизации данных.
Когда я обновляю что-то из приложения для iOS, обновления уже перенесены в PersistentStore в приложении для Mac во время работы приложения для Mac. Проблема в том, что я не могу найти эффективный способ заставить NSArrayController перезагрузить все данные из хранилища.
попробовал -(void) fetch:(id)sender; можно видеть только удаление или добавление объекта, но обновленное свойство модели не обновляется...
Пожалуйста помоги. Спасибо
Ответ 1 · рейтинг 1 · Adam
Если вы видите последние данные в контексте управляемого объекта, но не в контроллере массива, вы хотите:
[_yourManagedObjectContext processPendingChanges];
[_yourArrayController fetchWithRequest:nil merge:YES error:&error];
[_yourArrayController rearrangeObjects];
Я использую это в приложении iCloud для Mac/iOS, чтобы обновлять данные приложения Mac при изменении магазина iCloud.
Ответ 2 · рейтинг 1 · Cullen SUN
Ниже приведен ответ службы технической поддержки разработчиков Apple. Это сработало для меня. Спасибо всем за предоставление решений.
Для приложения OS X при вызове reloadFetchResults вы можете попросить NSManagedObjectContext сбросить себя и снова выполнить выборку.
- (void)reloadFetchedResults:(NSNotification *)note
{
NSDictionary *userInfoDict = [note userInfo];
NSManagedObjectContext *moc = self.coreDataController.mainThreadContext;
// this only works if you used NSMainQueueConcurrencyType
// otherwise use a dispatch_async back to the main thread yourself
//
[moc performBlock:^{
[self mergeiCloudChanges:userInfoDict forContext:moc];
[moc reset];
[self.tableArrayController fetch:self];
}];
}
Ответ 3 · рейтинг 1 · Todd
я нашел это
[self.managedObjectContext reset];
[myArrayController fetch:self];
заставляет мой NSTableView (с NSArrayController) повторно заполнять и отображать недавно обработанные NSManagedObjects.
Ответ 4 · Little Watchman
на случай, если кто-то еще обнаружит это... в моем случае я строил массив из взаимодействия с пользователем (не основных данных), а затем пытался показать tableView, когда они были сделаны (в том же окне)... и, конечно ... ничего не видя!
[Контроллер массива переупорядочитьОбъекты];
как раз перед тем, как я хотел показать, что tableView исправил это для меня.