我有一个单身属性(作为managedObject)。该属性中的对象可能会被更新(删除,然后用自定义Id创建新对象,与旧对象的ID相同),然后保存上下文,取消属性,获取新对象并将其分配给属性。CoreData。成功保存无效对象
我没有错误,一切正常。重新启动应用程序后,我得到“CoreData无法完成故障”异常。我通过sqliteBrowser打开了我的数据库,并在那里看到一个旧对象和新对象。新对象是正确的。旧对象(应删除的内容)与已删除的对象有关系。
另外,当不同的线程更新对象时,UI可以访问managedObject的属性。
它是如何发生的?以及如何防止这种情况?我阅读coreData疑难解答“CoreData无法履行故障”。自从例子以来我没有发现我的问题。
我对此很困惑。我有想法,但不知道,它是什么好方法: 如果使属性不是作为managedObject,但作为ID(自定义ID,作为NSNumber),owerload设置和getter。 Setter收到相同的对象,但可以访问自定义ID并为属性分配一个ID。 Getter - 通过id获取对象,保存在属性中。 Getter和setter会在启动时锁定NSLock并在结束时解锁。更新对象的线程也会锁定锁,直到更新和保存完成。 非常感谢!
P.S. 我很抱歉,但我通常不能以严肃的理由显示我的代码。
但我真的通过上下文删除对象,并检查所有删除规则,并确信所有规则分配给“级联”或“取消”。 – Arsynth
删除后是否保存了上下文?在保存上下文之前,商店不会更改。 – TechZen
是的,我做到了。而老对象,还有活断层存在与删除图有关系。它不经常发生,而不是所有的时间,使用相同的用户操作 – Arsynth