我正在开发一个使用 coredata 的 ipad 应用程序。它在网络上的数据库中下载信息,并将它们记录在 coredata 中。该应用程序基于拆分视图。我的问题是在后台进行数据的下载和记录。
以下是我的做法:
- 我创建了一个 NSOperation,用于下载和记录数据。
- 此 NSOperation 使用与 appDelegate 的上下文不同的 NSManagedObjectContext,由该函数返回,即在 appDelegate 中:
(NSManagedObjectContext*)newContextToMainStore {
NSPersistentStoreCoordinator *coord = nil;
coord = [self persistentStoreCoordinator];
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:coord];
return [moc autorelease];
}
- 我在 NSOperation 中有一个观察者,当我保存上下文时,它将在 appDelegate 中调用此函数,以修改委托的上下文:
- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification {
[[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification];
}
但是我有一个问题,同步不起作用,因为 rootViewController(即 UITableViewController)上的数据,具有使用 appDelegate 的上下文初始化的 NSManagedObjectContext 并用作 NSFetchedResultsController 的数据源,不会自动实现信息,因为它通常必须这样做。
所以我问你:
我做错了什么?使用两个不同的上下文并同步它们是好方法吗?