我的 iOS 应用程序通过多个线程使用核心数据。我收到一些崩溃报告,其中包含以下消息:“'NSObjectInaccessibleException',原因:'CoreData 无法满足'0x1e07a9b0'的错误”
我明白是什么导致了这个问题 - 该对象已被删除,但另一个线程正在尝试访问它。我正在努力解决这个问题,但我想在后台线程中添加一个检查,以查看对象是否会以这种方式出现故障。
我目前的代码涉及myObject.myValue
。是否可以做一些检查,例如:
if (!myObject.myValue) {
return;
}
...这样它就会在执行任何可能导致此类崩溃的操作之前退出该方法?或者只是简单地打电话myObject.myValue
,甚至看看它是否为空,导致抛出这样的异常?
你可以尝试使用existingObjectWithID:error: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#//apple_ref/occ/instm/NSManagedObjectContext/existingObjectWithID:error::
返回指定 ID 的对象。
- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error
讨论
如果上下文中已经注册了给定 ID 的托管对象,则直接返回该对象;否则相应的对象将被错误地放入上下文中。
如果数据未缓存,此方法可能会执行 I/O。
与 objectWithID: 不同,此方法永远不会返回错误。
你可以这样做:
if ([myMOC existingObjectWithID:myObject.objectID error:&error])
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)