有没有办法判断nsmanagedobject是否在上下文中,但不是任何或特定关系的一部分?

时间:2013-04-11 22:54:02

标签: ios core-data nsmanagedobject

例如,假设我有以下实体:

  • 内部

一个人可以拥有许多房屋和汽车,而汽车和房屋只能拥有一个房主。

现在考虑以下情况:

  1. 我将一个人插入上下文,还有3个房子和3辆车。 在这些房屋和汽车中,一个房子和一辆汽车已经有了 所有者。
  2. 然后,在重新出现的2个房子和2辆汽车中,我添加了其中一个 唯一插入的人。
  3. 此时,如果我保存上下文,它将反映3个房屋和3个房屋 context.insertedObjects中的汽车。但我只想保存对象 通过一个人可以到达(可以通过 这个想法是为了房子和汽车与前任所有者,那 所有者可能是一个错误,我从来没有拿过它。)
  4. 当然我可以在保存之前手动删除这些对象,但是我想知道我是否可以提出一个通用的解决方案,考虑来自特定对象的对象可达性。

    基本上是(伪代码)的一些东西:

    for (NSManagedObject *obj in context.registeredObjects) {
        if (Person does not reach obj in any relationship ) {
            [context deleteObject:obj];
        }
    }
    

    通过广义解决方案,我的意思是不需要知道关系和特定实体(不要为每个房子和汽车迭代一个人的房屋和汽车关系)。

1 个答案:

答案 0 :(得分:1)

您可以制作house&与car的{​​{1}}关系是非可选的,因此对于没有所有者的对象,保存将失败。

您可以通过继承和覆盖person方法直接在NSManagedObject级别处理验证问题。

检查该方法中的关系,如果它返回nil,您知道可以删除该对象。

这里有更多关于你的阅读https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdValidation.html