我在合并两个上下文之间的更改时遇到问题。其中之一是在后台(附加上下文)中作为 Web 服务读取和写入数据到数据库。当我尝试保存主上下文中的任何更改时,应用程序卡住了,什么也没发生。我创建的来自 Web 服务(单例)的上下文,如下所示。当我尝试保存主上下文时,我发送通知以将更改与 WebServices 上下文合并,但它无法正常工作。怎么了?当后台正在读取数据并且主要上下文尝试在数据库中保存某些内容时会发生这种情况。
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]
它应该可以工作,但我不知道出了什么问题,WebServices 在后台工作,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];