我在合并两个上下文之间的更改时遇到问题。其中之一是作为WebServices读取和写入数据到数据库的背景(附加上下文)。当我尝试保存主要上下文中的任何更改时,应用程序都陷入了僵局,没有任何事情发生。来自Web服务(单例)的上下文我创建,如下所示。当我尝试保存主要上下文时,我发送通知以将更改与WebServices上下文合并,但无法正常工作。怎么了?它发生在后台正在读取数据和主要上下文尝试保存我的数据库的东西。在后台工作的NSManagedObjectContext
managedObjectContext = [NSManagedObjectContext new];
NSPersistentStoreCoordinator *store = [ [theDelegate managedObjectContext] persistentStoreCoordinator];
[managedObjectContext setPersistentStoreCoordinator:store];
[managedObjectContext setStalenessInterval:0.0];
之前保存主要语境的使用:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext];
,我合并更改
[[[WebServie instance] managedObjectContext] mergeChangesFromContextDidSaveNotification:notification]
它应该工作,但我不知道怎么回事错误,Web服务是在后台工作,DataBaseManager在主线程中
那是我的合并上下文的代码是错的?
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserverForName:NSManagedObjectContextDidSaveNotification
object: self.managedObjectContext queue:nil
usingBlock:^(NSNotification *notification)
{
NSLog(@"merge");
[[[WebServiceManager instance] managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}];
NSError *error;
NSLog(@"error");
if (![self.managedObjectContext save:&error])
{
NSLog(@"error :%@", error);// Update to handle any error appropriately.
}
NSLog(@"after error");
[dnc removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:self.managedObjectContext];
保存主要上下文之前我使用:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges :) name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext]; – mbutan