我有一个正在努力寻找的错误。我相信发生的事情是,我正在从底层数据库中删除一个对象,而另一个托管对象上下文(在另一个线程中)有一个错误,并在尝试执行错误时收到“NSObjectInaccessibleException”。
这种情况是,我有一个 View 在后台同时通过一个上下文访问数据,另一个威胁是从存储中清除过时的记录。后台线程应该只清除 View 不需要的对象 - 显然情况并非如此,但我无法准确追踪发生的情况。当我看到缺陷时,为时已晚,这是一种相对罕见的缺陷,主要只发生在现场。
因此我的问题是:在调试 CoreData 时是否缺少任何技巧 - 我可以跟踪一个上下文中的对象在另一个上下文中的生命周期吗? IE。当我删除对象时,是否有一种简单的方法可以查看其他上下文是否引用了同一对象?使用它,我可以构建一些测试代码来检查我的逻辑并找到错误。
最佳答案
我之前遇到过这个错误,罪魁祸首是我正在清理(完成释放)我的上下文,然后尝试访问(以前)由该上下文管理的对象。
在我的例子中,上下文是一个“临时”上下文,当 View 关闭时它就会消失。但是,我有一个 View 生成的后台作业想要更新对象。
我最终为托管对象创建了一个访问器,当 [managementObject isFault] 为 true 时,该访问器返回 nil。然后在我的代码中,我检查该访问器选择器的值,以确保我有一个有效的对象可以使用(比如说当我的后台作业最终完成其工作时)。
我对核心数据还很陌生,所以可能有更好/更智能的方法来做到这一点,但我认为它解决了我的问题。
关于core-data - 调试 NSObjectInaccessibleException - ID 为 :0x123456789 has been invalidated 的 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250872/