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