如何同步两个NSManagedObjectContext

时间:2010-07-11 21:46:11

标签: iphone multithreading core-data nsoperation


我正在研究使用coredata的ipad应用程序。它下载有关Web上数据库的信息,并将其记录在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),有一个NSManagedObjectContext初始化了appDelegate的上下文,并用作NSAetchedResultsController的数据源,不能自动实现信息,正如它必须做的那样 所以我问你:
我做错了什么?这是使用两个不同的上下文并同步它们的好方法吗?

1 个答案:

答案 0 :(得分:1)

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