我的iOS应用通过多个线程使用核心数据。我收到一些崩溃报告,并显示以下消息:“'NSObjectInaccessibleException',原因:'CoreData无法满足'0x1e07a9b0的错误”
我了解导致此问题的原因-该对象已删除,但另一个线程正在尝试访问它。我正在努力解决问题,但我想在后台线程中添加检查以查看对象是否会以这种方式发生故障。
此刻我的代码与myObject.myValue
有关。是否可以做一些检查,例如:
if (!myObject.myValue) {
return;
}
...,以便在执行任何可能导致此类崩溃的操作之前退出方法?还是会简单地调用myObject.myValue
,即使它是否为空,也会引发此类异常?
您可以尝试使用existingObjectWithID:error:
:
返回指定ID的对象。
existingObjectWithID:error:
讨论
如果上下文中已经注册了具有给定ID的托管对象,则直接返回该对象;否则,相应的对象将被错误地放入上下文。
如果未缓存数据,此方法可能会执行I / O。
与objectWithID:不同,此方法永远不会返回错误。
您可以这样做:
- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID error:(NSError **)error
如果遇到在另一个线程上可能删除该对象的问题,则应在访问该对象的变量之前验证该对象是否存在。
两种方法:
if ([myMOC existingObjectWithID:myObject.objectID error:&error])
...
通知,然后解析该通知上的NSManagedObjectContextObjectsDidChangeNotification
来查看删除了哪个对象。]示例:
userInfo
您可以在使用NSManagedObject时检查NSManagedContext是否存在。像这样:
您可以检查if (obj.managedObjectContext)
{
//do things
}
,其中[myObject isFault]
是myObject
实例
您可以尝试使用: