0

我有如下父子上下文:1. writercontext 和NSPrivateQueueConcurrencyType 2. mainContext 和NSMainQueueConcurrencyType ParentContext:writercontext 3. 和背景上下文NSPrivateQueueConcurrencyType ParentContext:writercontext

如何通过背景上下文所做的更改通知主上下文?

我已经阅读了最后一部分:异步保存,但它不会在后台保存或导入,它会阻止 UI 并且无响应。有没有办法在背景中使用子父上下文并仍然通知主上下文?

目前我保存我的上下文:

[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);
    }

}];
4

1 回答 1

0

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

[context performBlock:^{

...

}];

这样主线程不会被阻塞,因为该块将在另一个线程上执行。

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

于 2013-09-30T13:31:43.523 回答