Iphone NSManagedObjectContext异步导入、保存和通知主上下文

Iphone NSManagedObjectContext异步导入、保存和通知主上下文,iphone,core-data,nsmanagedobjectcontext,Iphone,Core Data,Nsmanagedobjectcontext,我得到的父子上下文如下: 1.writercontext具有NSPrivateQueueConcurrencyType 2.带有NSMainQueueConcurrencyType的mainContextParentContext:writercontext 3.和具有NSPrivateQueueConcurrencyType的后台上下文ParentContext:writercontext 如何通过后台上下文所做的更改通知主上下文 我已经读过了,但它不会在后台保存或导入,它会导致UI被阻塞和无

我得到的父子上下文如下: 1.writercontext具有
NSPrivateQueueConcurrencyType
2.带有NSMainQueueConcurrencyType的mainContext
ParentContext:writercontext
3.和具有
NSPrivateQueueConcurrencyType的后台上下文
ParentContext:writercontext

如何通过后台上下文所做的更改通知主上下文

我已经读过了,但它不会在后台保存或导入,它会导致UI被阻塞和无响应。有没有办法在backgound中使用子-父上下文,但仍然通知主上下文

当前我保存我的上下文:

[context performBlockAndWait:^{
    @try {
        NSError *childError = nil;
        if ([context save:&childError])
        {
            [context.parentContext performBlockAndWait:^{
                NSError *parentError = nil;
                if ([context.parentContext save:&parentError])
                {
                     //saved
                }
                else
                {
                    nslog(@"Error: %@", parentError.description);
                }
            }];
        }
        else
        {
            DBERROR(@"Error: %@", childError.description);
        }
    }
    @catch (NSException *exception)
    {
        DBERROR(@"Exception: %@", exception.description);
    }

}];

我假设
context
是您的背景上下文。 如果从主线程调用
performBlockAndWait
,它将被阻塞,直到阻塞完成。您应该将代码替换为:

[context performBlock:^{

...

}];
这样主线程就不会被阻塞,因为阻塞将在另一个线程上执行


至于保存,我想您的更改不会传播到您的
mainContext
。我自己也没有使用嵌套上下文,所以我不确定它为什么会这样工作(可能需要手动合并上下文之间的更改)。

有没有解决这个问题的想法?