我有一个相当简单的 Core Data 应用程序数据模型。基本上,我提出 手机上已有的联系人列表。当用户点击联系人时,他们就会被带走 转到详细信息 View 屏幕,他们可以在其中选择电话号码或电子邮件地址。当他们 选择任何详细信息项,我将通过核心数据存储它。
我有一个名为 Contact
的实体,另一个名为 Contact_Detail
。
联系方式<----->> Contact_Detail
Contact_Detail 的 Contact 关系具有 Deny 删除规则。 Contact_Detail 与 Contact 的关系具有 No Action 删除规则。
如果用户想要删除,比如说,之前选择的详细信息项,我首先获取
与联系人具有相同 ID 的 Contact_Detail 对象。如果只有一个 Contact_Detail
对象返回,然后我知道我需要从联系人实体中删除联系人。如果有
返回了多个 Contact_Detail
对象,我只是删除了那个特定的对象。
一切正常,数据库正在按预期更新(删除了详细对象,并且当 特定联系人的最后一个详细信息对象被删除,联系人也被删除)只要我来回 在 peoplePicker 和 peopleDetailViewController 之间。
我遇到的问题是,当我选择一个电子邮件地址时,留下 detailVC,留下 peoplePicker,然后
返回到 peoplePicker,并返回到同一个联系人,并取消选择我之前的电子邮件地址
选中后,Core Data 抛出一个错误,看起来好像无法删除我的 Contact
因为有
仍然是关系对象(Contact_Detail
):
NSValidationErrorKey=details, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1600.), NSValidationErrorValue=Relationship objects for {( (entity: Contact_Detail; id: 0xd21afe0 ; data: ) )} on 0x5d5a780}
我可以验证 Contact_Detail
对象确实被删除了。为什么无法删除联系人?为什么
这是否只发生在特定的导航序列中?
让我知道是否应该发布一些代码。我认为这个问题导致了我在抛出第一个错误后继续使用 Core Data 后看到的崩溃。
谢谢!
最佳答案
为什么不这样设置删除规则呢?
Contact<--(cascade)-->>ContactDetail
//when Contact is removed, all details are removed too)
ContactDetail<<--(nullify)-->Contact
//when Contact Detail is removed, this particular detail is removed from Contact too
关于iphone - Core Data 不允许我删除没有关系对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409570/