我正在使用Mac& iOS App,中间使用iCloud CoreData来同步数据。
当我从iOS App更新某些内容时,在Mac App运行时,更新已经迁移到Mac App中的PersistentStore。问题是我找不到强制NSArrayController重新加载商店中所有数据的有效方法。
尝试 - (void)fetch:(id)sender;只能看到删除或添加的实体,但更新的模型属性未刷新...
请帮忙。感谢
答案 0 :(得分:1)
我发现了
[self.managedObjectContext reset];
[myArrayController fetch:self];
强制我的NSTableView(使用NSArrayController)重新填充并显示新处理的NSManagedObjects。
答案 1 :(得分:1)
如果您在托管对象上下文中看到最新数据,但在阵列控制器中没有,则需要:
[_yourManagedObjectContext processPendingChanges];
[_yourArrayController fetchWithRequest:nil merge:YES error:&error];
[_yourArrayController rearrangeObjects];
我在Mac / iOS iCloud应用程序中使用它来在iCloud存储更改时更新Mac应用程序的数据。
答案 2 :(得分:1)
以下是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 :(得分:0)
万一其他人发现这个...... 在我的情况下,我是从用户交互(而不是核心数据)构建数组,然后尝试在完成它们时(在同一个窗口上)显示tableView ......当然......什么都看不见!
[arrayController rearrangeObjects];
就在我想要显示tableView为我修复它之前。