CoreData的performBlock:和错误

时间:2013-11-12 09:24:41

标签: ios objective-c core-data

我正在使用performBlock:和performBlockAndWait:方法在我的上下文中对只读数据库执行获取请求(它与我的应用程序打包在一起,所以永远不会写入)。

我是否应该在performBlockAndWait中包装每个NSManagedObject访问器: - 那太乱了。当CoreData的私有队列正在使用performBlock执行执行时,当CoreData发生一对多关系时,我当前正在崩溃:

类似的东西:

NSManagedObject* alreadyFetchedObject = ...;
NSArray* alreadyFetchedObject.otherObjects; // Crashes here on main thread (no performBlock wrapped around accessing otherObjects)

[context performBlockAndWait:^{
    // Currently executing here on CoreData's own queue
    result = [context executeFetchRequest:fetchRequest error:nil];
}];

1 个答案:

答案 0 :(得分:1)

是的,当然。可能是与已在主线程上执行的上下文关联的托管对象的例外。但为了清楚起见,我总是将访问包装到performBlock:。小心performBlockAndWait: - 这对于死锁很容易出错。

此外,如果你有这样的陈述:

NSManagedObject* alreadyFetchedObject = ...;

并稍后访问alreadyFetchedObject,您需要确保相应的托管对象上下文仍然存在。因此,始终访问performBlock:performBlockAndWait:的托管对象,提醒您不要意外删除上下文;)