2

我正在开发 Mac 和 iOS 应用程序,中间使用 iCloud CoreData 来同步数据。

当我从 iOS 应用程序更新某些东西时,更新已经在 Mac 应用程序运行时迁移到 Mac 应用程序中的 PersistentStore。问题是我找不到强制 NSArrayController 从存储区重新加载所有数据的有效方法。

试过 -(void) fetch:(id)sender; 只能看到删除或添加的实体,但更新的模型属性没有刷新...

请帮忙。谢谢

4

4 回答 4

1

我发现

[self.managedObjectContext reset];
[myArrayController fetch:self];

强制我的 NSTableView(带有 NSArrayController)重新填充并显示新处理的 NSManagedObjects。

于 2012-12-27T20:16:38.297 回答
1

如果您在托管对象上下文中看到最新数据,但在数组控制器中看不到,您需要:

[_yourManagedObjectContext processPendingChanges];
[_yourArrayController fetchWithRequest:nil merge:YES error:&error];
[_yourArrayController rearrangeObjects];

当 iCloud 商店发生变化时,我在 Mac/iOS iCloud 应用程序中使用它来更新 Mac 应用程序的数据。

于 2013-03-27T00:45:21.907 回答
1

以下是苹果开发者技术支持的回复。它对我有用。感谢大家提供解决方案。

对于 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];
}];
}
于 2013-03-27T03:05:08.237 回答
0

以防其他人发现这个......在我的情况下,我是从用户交互(不是核心数据)构建数组,然后尝试在完成后显示 tableView(在同一个窗口上)......当然……什么也看不见!

[arrayController 重新排列对象];

就在我想显示 tableView 为我修复它之前。

于 2015-09-01T10:36:39.450 回答