Core Data不允许我删除没有关系对象的对象

时间:2011-03-23 18:01:04

标签: iphone objective-c ios core-data

我有一个相当简单的核心数据应用数据模型。基本上,我是在抚养 手机上已有的联系人列表。当用户点击一个联系人时,他们就会被拿走 到详细视图屏幕,他们可以选择电话号码或电子邮件地址。当他们 选择任何细节项目,我通过核心数据存储它。

我有一个名为Contact的实体,另一个叫Contact_Detail

联系< ----->> CONTACT_DETAIL

Contact_Detail的联系人关系有一个拒绝删除规则。 Contact的Contact_Detail关系具有No Action的删除规则。

如果用户想删除之前选择的详细信息项,我首先要获取 与联系人具有相同ID的Contact_Detail对象。如果只有一个Contact_Detail 返回的对象,然后我知道我需要从Contact实体中删除联系人。如果有 返回了多个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后出现崩溃。

谢谢!

1 个答案:

答案 0 :(得分:4)

为什么不以这种方式设置删除规则?

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