2011-03-23 27 views
0

我有一个相当直接的数据模型的核心数据应用程序。基本上,我正在调出 手机上已有的联系人列表。当用户点击联系人时,他们被带到 到详细视图屏幕,他们可以在其中选择电话号码或电子邮件地址。当他们 选择任何细节项目,我通过核心数据存储它。核心数据不会让我删除一个没有关系对象的对象

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

联系< ----- >> CONTACT_DETAIL

到CONTACT_DETAIL的接触关系有拒绝删除规则。 与联系人的Contact_Detail关系具有无操作的删除规则。

如果用户想要删除先前选择的明细项目,我首先获取与联系人具有相同ID的Contact_Detail对象 。如果返回的对象只有一个Contact_Detail 对象,那么我知道我需要从Contact实体中删除联系人。如果有 多于一个Contact_Detail对象返回,我只是删除该特定的对象。

这一切都工作正常,并且数据库正在按预期更新(删除明细对象,并且在删除特定联系人的最后详细信息对象时,联系人也会被删除),只要我只是来回移动peoplePicker和peopleDetailViewController之间。

我遇到的问题是,当我选择一个电子邮件地址,离开detailVC,离开peoplePicker,然后 返回到peoplePicker,并回到相同的接触,并取消了电子邮件地址,我以前 选择核心数据被抛出,看起来就好像它不能删除我的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后发生的崩溃。

谢谢!

回答

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 
+0

的Izzy - 最后的细节对象被删除之后,我只能删除联系人(他们可以选择2个电子邮件,2部电话等),我肯定可以设置非接触> CONTACT_DETAIL串级,但只能拿在确定只剩下一个细节对象之后​​,级联的优点。据我所知,我无法将Contact_Detail-> Contact设置为无效,因为这意味着只要有人删除了一个说,四个细节对象,那么关联的联系人对象将被删除,而其他三个细节对象成为孤立。 – djibouti33 2011-03-23 18:27:27

+0

不是。假设您有四个联系人详细信息联系。当您删除一个联系人详细信息时,此详细信息将从您的联系人对象和基础持久性存储/上下文中消失。没有孤儿。结果将与三个联系方式联系。 – robertvojta 2011-03-23 18:30:46

+0

+1这就是你想要的方式。 – TechZen 2011-03-23 19:21:40

相关问题