说我有Project
和Path
。 Project
有许多路径(可选)。 Paths
可以属于许多项目(非可选,min = 1)。当我归档与Project
关联的最后Path
时,Path
也应归档。但是,当Path
属于另一个活动项目时,它不应该存档。
“存档”等于设置archivedDate
属性。
我天真的方法是:持久堆栈订阅核心数据通知(不确定哪些),在保存时检查受影响的Path
个对象,并强制执行存档规则。
您将如何实施“级联”存档?
答案 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
中完成。