我正在使用performBlock:和performBlockAndWait:方法在只读数据库上对上下文执行获取请求(该数据包与我的应用程序打包在一起,因此从未写入过)。
我是否也应该将每个NSManagedObject访问器都包装在performBlockAndWait中: -太乱了。当前,每当CoreData的一对多关系出现故障而CoreData的 private 队列使用performBlock执行execute时,我都会崩溃:
就像是:
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];
}];
最佳答案
当然是。也许与托管对象相关联,该托管对象已与在主线程上执行的上下文相关联。但是为了清楚起见,我总是将访问包装到performBlock:
中。小心performBlockAndWait:
-这很容易导致死锁。
此外,当您有这样的语句时:
NSManagedObject* alreadyFetchedObject = ...;
并在以后访问
alreadyFetchedObject
,您需要确保相应的托管对象上下文仍然存在。因此,始终使用performBlock:
或performBlockAndWait:
访问托管对象会提醒您不要意外删除上下文;)关于ios - CoreData的performBlock:和错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19925316/