在删除/编辑核心数据对象时遵循逻辑和关系

时间:2013-12-12 12:08:58

标签: ios iphone objective-c core-data editing

我的应用程序有两个实体:

  • 合同

相关如下:

  • 一个人可以有很多合同。
  • 合同只能由一个人持有。

我已经有了创建Core Data信息的基本应用程序,可以在表视图中显示它。我很困惑在某些情况下该怎么做,比如重命名人。

假设A人有合同A而B人有B合同。如果我将A人重命名为C人,则自动将合同A分配给C人,因此A人没有任何合同,因此不再存在

我如何有效地实现这一目标?

在我的应用中,我在标签栏中有两个表视图控制器,第一个包含合同作为节标题,人物名称作为行文本标签。第二个选项卡不包含任何部分,而只包含人名行。

如果在第一个表格视图中,我在合同A下面有人员A,然后我进入并将人员A重命名为人员C,然后当detailViewController保存并且表格刷新时,我将看到合同A成功分配给人员C和人A被删除。

但是,如果我转到人员选项卡,我仍然会看到人员A,但我现在也会看到人员C.人员C,当我点击它时显示合同A,但是当我点击时人员A没有记录因此,应该删除。

有几点需要注意:

1)如果A人有其他合同,那么它当然不应该被删除。 2)我正在为人员和合同使用NSManagedObject子类 3)Contracts选项卡在NSFetchedResultsController中使用Contracts Entity,People选项卡在其NSFetchedResultsController中使用People Entity。 4)最初我的关系的两边都被设置为Nullify但是我在一边用Cascade尝试了这个,然后两边都有相同的结果。

我目前没有任何代码,因为我真的不确定如何解决这个特定的情况(请记住,其他一切在这一点上运作良好)。

1 个答案:

答案 0 :(得分:1)

我不太确定我理解你想要完成什么,但是......

您所做的似乎不是“重命名”,而是“重新分配”合同给新用户。
这意味着,您正在创建“人员C”并为其指定“联系人A”。

我不确定您尝试实施的行为是什么。

如果你想要一个Person但没有Contract只是在视图控制器中不显示, 但是仍然存在于您的商店中,您将需要以下内容:
在“人员视图控制器”中,将此谓词用于fetched results controller

NSPredicate* p = [NSPredicate predicateWithFormat:@"contracts.@count != 0"];

如果您想删除没有Person的{​​{1}},则需要添加自定义逻辑。
这可能类似于:

Contract