我在单例中有属性(作为 managedObject)。属性中的这个对象可能会被更新(删除,然后使用自定义 ID 创建新对象,与旧对象的 ID 相等),然后我保存上下文,使属性无效,获取新对象并将其分配给属性。
我没有错误,一切正常。重新启动应用程序后,我得到“CoreData 无法完成故障”异常。我确实通过 sqliteBrowser 打开了我的数据库,并在那里看到了一个旧对象和一个新对象。新对象是正确的。旧对象(应该删除的)与已删除的对象有关系。
此外,当不同的线程更新一个对象时,UI 可以访问 managedObject 的属性。
它是如何发生的?以及如何防止这种情况?我用“CoreData 无法完成故障”阅读了 coreData 故障排除。自示例以来,我没有发现我的问题。
我对此非常困惑。我有想法,但不确定,它是什么好方法:如果使属性不是 managedObject,而是作为 id(自定义 id,作为 NSNumber),owerload setter 和 getter 怎么办。Setter 接收相同的对象,但可以访问自定义 id 并为属性分配一个 id。Getter - 通过 id 获取对象,保存在属性中。Getter 和 setter 将在开始时锁定 NSLock 并在结束时解锁。更新对象的线程也会锁定锁,直到更新和保存完成。非常感谢!
PS我很抱歉,但我通常不能因为严重的原因显示我的代码。