Ios 上下文已经有了一个协调器;无法取代

Ios 上下文已经有了一个协调器;无法取代,ios,objective-c,core-data,Ios,Objective C,Core Data,在执行我的应用程序时,我收到错误“由于未捕获的异常'NSInternalInconsistencyException'终止应用程序”,原因:“上下文已具有协调器;无法替换”。” 在DataBaseManager.m中,我有以下代码: AppDelegate *sharedDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; NSManagedObjectContext *privateW

在执行我的应用程序时,我收到错误“由于未捕获的异常'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
            }
        }];
    }];
}];
- (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;
}
在appDelegate.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
            }
        }];
    }];
}];
- (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;
当错误发生时。 如何更正此错误?

-(NSManagedObjectContext*)managedObjectContextChild的顶部放置一个断点,然后查看正在使用的
NSManagedObjectContext
的其他位置

错误是告诉您它已经有了一个持久的存储协调器,所以这是您的攻击线

您将这些作为单个实例访问,因此应用程序的其他区域需要知道如何处理它们(以及不应做什么!)。您还可以在错误发生之前检查
persistentstorecordinator
parentContext
属性,以帮助了解发生的情况

这并不是什么可怕的事情,使用几个合理放置的断点应该不会太难找到,但是您可能需要考虑如何更仔细地管理各种上下文以解决问题