我正在开发 Mac 和 iOS 应用程序,中间使用 iCloud CoreData 来同步数据。
当我从 iOS 应用程序更新某些东西时,更新已经在 Mac 应用程序运行时迁移到 Mac 应用程序中的 PersistentStore。问题是我找不到强制 NSArrayController 从存储区重新加载所有数据的有效方法。
试过 -(void) fetch:(id)sender; 只能看到删除或添加的实体,但更新的模型属性没有刷新...
请帮忙。谢谢
我正在开发 Mac 和 iOS 应用程序,中间使用 iCloud CoreData 来同步数据。
当我从 iOS 应用程序更新某些东西时,更新已经在 Mac 应用程序运行时迁移到 Mac 应用程序中的 PersistentStore。问题是我找不到强制 NSArrayController 从存储区重新加载所有数据的有效方法。
试过 -(void) fetch:(id)sender; 只能看到删除或添加的实体,但更新的模型属性没有刷新...
请帮忙。谢谢
我发现
[self.managedObjectContext reset];
[myArrayController fetch:self];
强制我的 NSTableView(带有 NSArrayController)重新填充并显示新处理的 NSManagedObjects。
如果您在托管对象上下文中看到最新数据,但在数组控制器中看不到,您需要:
[_yourManagedObjectContext processPendingChanges];
[_yourArrayController fetchWithRequest:nil merge:YES error:&error];
[_yourArrayController rearrangeObjects];
当 iCloud 商店发生变化时,我在 Mac/iOS iCloud 应用程序中使用它来更新 Mac 应用程序的数据。
以下是苹果开发者技术支持的回复。它对我有用。感谢大家提供解决方案。
对于 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];
}];
}
以防其他人发现这个......在我的情况下,我是从用户交互(不是核心数据)构建数组,然后尝试在完成后显示 tableView(在同一个窗口上)......当然……什么也看不见!
[arrayController 重新排列对象];
就在我想显示 tableView 为我修复它之前。