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

标签 iphone objective-c ios core-data

我有一个相当简单的 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/

相关文章:

ios - 使用自动布局将3个按钮与 objective-c 中的动态内容对齐

ios - 一组动画完成后切换到不同 View

iphone - 将相同的 MPMediaItem 添加到 iPod 队列时会出现大问题 - 我如何跟踪正在播放的是哪一个?

iphone - UITextField 具有安全输入功能,在编辑之前始终会被清除

iphone - 在应用程序购买 iphone 中发送到已释放实例的消息

objective-c - 我如何在 Objective-C 中使用枚举数据类型?

iphone - 你如何让 CILinearGradient 等 Core Image 滤镜工作?

iphone - 初始化从整数生成指针而不进行强制转换

ios - 24 小时制不格式化日期

ios - 如何在 iOS 应用程序中实现使用 FaceBook 登录