core-data - 调试 NSObjectInaccessibleException - ID 为 :0x123456789 has been invalidated 的 NSManagedObject

标签 core-data

我有一个正在努力寻找的错误。我相信发生的事情是,我正在从底层数据库中删除一个对象,而另一个托管对象上下文(在另一个线程中)有一个错误,并在尝试执行错误时收到“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/

相关文章:

iphone - 退出核心数据迁移?

iphone - 核心数据: Errors vs Exceptions Part 2

ios - 使用 Core Data 在 RestKit 中搜索远程服务器

ios - 将 json 对象添加到数组

objective-c - NSFetchedResultsController 有 0 个部分

ios - Xcode 4 中的(复合)Predicate Builder——它在哪里?

iphone - 检查核心数据数据库中实体存在的通用方法

ios - 休息套件 : addSQLitePersistentStoreAtPath produce extra record

iphone - 每次触摸UIButton时将值增加1

objective-c - 为 Xcode 8 Core Data NSManagedObject 子类更改更新 Objective C 项目的正确方法