2

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

  • 房子

一个人可以有很多房子和汽车,而汽车和房子只能有一个所有者。

现在考虑以下场景:

  1. 我在上下文中插入了一个人,以及 3 座房屋和 3 辆汽车。在这些房屋和汽车中,一所房屋和一辆车已经有了所有者。
  2. 然后,在剩下的 2 栋房屋和 2 辆汽车中,我将每个添加到唯一插入的人中。
  3. 此时,如果我保存上下文,它将在 context.insertedObjects 中反映 3 座房屋和 3 辆汽车。但我只想保存通过我有句柄的人可以到达的对象(这个想法是,对于以前所有者的房子和汽车,那个所有者可能是一个错误,我从来没有拿过它。)

当然,我可以在保存之前手动删除这些对象,但我想知道是否可以提出一个通用的解决方案,考虑到特定对象的对象可达性。

基本上类似于(伪代码):

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

通过通用解决方案,我的意思是不需要了解关系和特定实体的东西(以免迭代每个房屋和汽车的人的房屋和汽车关系)。

4

1 回答 1

1

您可以将house&car关系设为person非可选,这样对于没有所有者的对象,保存将失败。

NSManagedObject您可以通过子类化和覆盖-(BOOL)validateForInsert:(NSError**)error方法直接在级别上处理验证问题。

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

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

于 2013-04-25T22:48:51.887 回答