【问题标题】:Core Data won't let me delete an object with no relationship objectsCore Data 不允许我删除没有关系对象的对象
【发布时间】:2011-03-24 03:21:04
【问题描述】:

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

我有一个实体叫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=操作无法完成。 (Cocoa 错误 1600.), NSValidationErrorValue=Relationship objects for {( (实体:Contact_Detail;id:0xd21afe0;数据:) )} 在 0x5d5a780}

我可以验证Contact_Detail 对象确实被删除了。为什么无法删除联系人?以及为什么 这是否只发生在特定的导航序列中?

如果我应该发布一些代码,请告诉我。我认为这个问题导致我在抛出第一个错误后继续使用 Core Data 后看到的崩溃。

谢谢!

【问题讨论】:

    标签: iphone objective-c ios core-data


    【解决方案1】:

    为什么不这样设置删除规则呢?

    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
    

    【讨论】:

    • Izzy - 我只能在删除最后一个详细信息对象后删除一个联系人(他们可能选择了 2 封电子邮件、2 部电话等)。我绝对可以将 Contact->Contact_Detail 设置为 Cascade,但可以只有在我确定只剩下一个细节对象后才利用级联。据我了解,我不能将 Contact_Detail->Contact 设置为无效,因为这意味着任何时候有人删除了其中一个,比如说四个详细信息对象,然后关联的联系人对象将被删除,而其他三个详细信息对象将成为孤立对象。
    • 不。假设您有四个联系人详细信息的联系人。当您删除一个联系人详细信息时,此详细信息将从您的联系人对象和底层持久存储/上下文中消失。没有孤儿。结果将是带有三个联系人详细信息的联系人。
    • 对我来说还是有点模糊,但是嘿,它正在工作!谢谢大家。
    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多