3


我正在开发一个使用 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 的数据源,不会自动实现信息,因为它通常必须这样做。
所以我问你:
我做错了什么?使用两个不同的上下文并同步它们是好方法吗?

4

1 回答 1

1

你在这里看起来是正确的。您确实希望确保NSFetchedResultControllerDelegate在 rootViewController 中实现方法,以便更改将出现在 UI 中。

于 2010-07-12T15:47:19.893 回答