Iphone 如何同步两个NSManagedObjectContext
Iphone 如何同步两个NSManagedObjectContext,iphone,multithreading,core-data,nsoperation,Iphone,Multithreading,Core Data,Nsoperation,我正在开发一款使用coredata的ipad应用程序。它在web上的数据库上下载信息,并将其记录在coredata中。该应用程序基于拆分视图。我的问题是在后台下载和记录数据。以下是我的做法: -我已经创建了一个NSO操作,用于下载和记录数据。 -此NSOperation使用与appDelegate上下文不同的NSManagedObjectContext,通过此函数返回,即在appDelegate中: (NSManagedObjectContext*)newContextToMainStore {
我正在开发一款使用coredata的ipad应用程序。它在web上的数据库上下载信息,并将其记录在coredata中。该应用程序基于拆分视图。我的问题是在后台下载和记录数据。
以下是我的做法:
-我已经创建了一个NSO操作,用于下载和记录数据。
-此NSOperation使用与appDelegate上下文不同的NSManagedObjectContext,通过此函数返回,即在appDelegate中:
(NSManagedObjectContext*)newContextToMainStore {
NSPersistentStoreCoordinator *coord = nil;
coord = [self persistentStoreCoordinator];
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:coord];
return [moc autorelease];
}
-我在NSO操作中有一个观察者,当我保存上下文时,它将在appDelegate中调用此函数,以修改代理的上下文:
- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification {
[[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification];
}
但我有一个问题,同步不起作用,因为rootViewController(即UITableViewController)上的数据(使用appDelegate的上下文初始化了NSManagedObjectContext并将NSFetchedResultsController用作数据源)不会像正常情况下那样自动实现信息。所以我问你:
我做错了什么?使用两种不同的上下文并将它们同步是一种好方法吗?这里的内容看起来是正确的。您确实希望确保在rootViewController中实现了
NSFetchedResultControllerDelegate
方法,以便更改将显示在UI中。谢谢您的回答。实现了NSFetchedResultControllerDelegate。事实上,当我在appDelegate中启动系统时,它可以工作,但在稍后调用的viewController中不能工作。我在寻找我的错误,我认为这只是一个小小的错误…嗨,再次,我感到困惑,我发现了我的错误:我已经完成了两个NSOperation子类,而在第二个,我忘记了添加观察者来在两个上下文中进行修改。谢谢你的关注!