我有父子上下文如下:
1.带有NSPrivateQueueConcurrencyType
的writercontext
2.带有NSMainQueueConcurrencyType
ParentContext:writercontext
的mainContext
3.和NSPrivateQueueConcurrencyType
ParentContext:writercontext
如何通过后台上下文所做的更改来通知主要上下文?
我已阅读the last part: async save,但不会在后台保存或导入,并且会阻止用户界面和无响应。有没有办法在背景中使用子父上下文并仍然通知主要上下文?
目前我保存了我的上下文:
[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);
}
}];
答案 0 :(得分:0)
我认为context
是你的背景背景。
如果从主线程调用performBlockAndWait
,它将被阻塞,直到块完成。您应该用以下代码替换您的代码:
[context performBlock:^{
...
}];
这样主线程就不会被阻塞,因为该块将在另一个线程上执行。
至于保存,我猜您的更改不会传播到mainContext
。我自己没有使用过嵌套的上下文,所以我不确定它为什么会这样工作(也许你需要手动合并上下文之间的变化)。