我收到错误“由于未捕获的异常终止应用程序'NSInternalInconsistencyException',原因:'上下文已经有一个协调器;无法替换。'”执行我的应用程序时。
在DataBaseManager.m中,我有以下代码:
AppDelegate *sharedDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *privateWriterContext = [sharedDelegate privateWriterContext];
NSManagedObjectContext *context = [sharedDelegate managedObjectContextChild];
context.parentContext = privateWriterContext;
NSManagedObjectContext *contextforThread = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
contextforThread.parentContext = context;
[contextforThread performBlock:^{
//things to do in background
NSError *error;
if (![contextforThread save:&error])
{
// handle error
}
[context performBlock:^{
NSError *error;
if (![context save:&error])
{
// handle error
}
[privateWriterContext performBlock:^{
NSError *error;
if (![privateWriterContext save:&error])
{
// handle error
}
}];
}];
}];
并在appDelegate.m中我有以下代码:
- (NSManagedObjectContext *)managedObjectContextChild
{
if (_managedObjectContextChild != nil) {
return _managedObjectContextChild;
}
_managedObjectContextChild = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
return _managedObjectContextChild;
}
- (NSManagedObjectContext *)privateWriterContext
{
if (_privateWriterContext != nil) {
return _privateWriterContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_privateWriterContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_privateWriterContext setPersistentStoreCoordinator:coordinator];
}
return _privateWriterContext;
}
Xcode显示行
context.parentContext = privateWriterContext;
发生错误时。 我怎么能纠正这个错误?
答案 0 :(得分:-1)
在- (NSManagedObjectContext *)managedObjectContextChild
的顶部放置一个断点,看看NSManagedObjectContext
正在使用的其他地方。
错误告诉您它已经拥有持久存储协调器,因此这是您的攻击线。
您正在将这些作为单个实例访问,因此应用程序的其他区域需要知道如何处理它们(以及不应该做什么!)。您还可以在错误发生之前检查persistentStoreCoordinator
和parentContext
属性,以帮助了解正在发生的事情。
没有什么可怕的,也不应该用一些明智的断点来找到它们,但是你可能不得不考虑如何更仔细地管理各种情况以解决问题。 / p>