核心数据用于最后一个子对象的多对多级联归档(废弃)

时间:2014-11-13 14:32:03

标签: core-data many-to-many cascade

说我有ProjectPathProject有许多路径(可选)。 Paths可以属于许多项目(非可选,min = 1)。当我归档与Project关联的最后Path时,Path也应归档。但是,当Path属于另一个活动项目时,它不应该存档。

“存档”等于设置archivedDate属性。

我天真的方法是:持久堆栈订阅核心数据通知(不确定哪些),在保存时检查受影响的Path个对象,并强制执行存档规则。

您将如何实施“级联”存档?

1 个答案:

答案 0 :(得分:1)

我认为您可以简单地覆盖setArchivedDate课程中的Project。在那里,您可以检查所有路径的状态并相应地归档,例如

-(void)setArchivedDate:(NSDate*)newValue {
   [self willChangeValueForKey:@"archivedDate"];
   [self setPrimitiveValue:newValue forKey:"archivedDate"];
   [self didChangeValueForKey:@"archivedDate"];

   for (Path *path in self.paths) {
      NSSet *activeProjects = [path.projects filteredSetUsingPredicate: 
         [NSPredicate predicateWithFormat:@"archivedDate = nil"]];
      if (!activeProjects.count) {
         path.archivedDate = newValue;
      }
   }
}

PS:如果您使用的是Swift,则可以在didSet中完成。