Core data 最后一个子对象的核心数据多对多级联存档(垃圾)
假设我有Core data 最后一个子对象的核心数据多对多级联存档(垃圾),core-data,many-to-many,cascade,Core Data,Many To Many,Cascade,假设我有项目和路径项目有许多路径(可选)路径可以属于许多项目(非可选,最小值为1)。当我归档与路径关联的最后一个项目时,路径也应该归档。但是,当路径属于另一个活动项目时,不应将其存档 “存档”等于设置archivedDate属性 我的天真方法是:持久堆栈订阅核心数据通知(但不确定是哪一个),在保存时检查受影响的Path对象,并强制执行存档规则 如何实现“级联”归档?我认为您可以简单地覆盖项目类中的setArchiveDate。在那里,您可以检查所有路径的状态,并相应地进行归档,例如 -(void
项目
和路径
<代码>项目有许多路径(可选)<代码>路径可以属于许多项目(非可选,最小值为1)。当我归档与路径
关联的最后一个项目
时,路径
也应该归档。但是,当路径属于另一个活动项目时,不应将其存档
“存档”等于设置archivedDate
属性
我的天真方法是:持久堆栈订阅核心数据通知(但不确定是哪一个),在保存时检查受影响的Path
对象,并强制执行存档规则
如何实现“级联”归档?我认为您可以简单地覆盖
项目
类中的setArchiveDate
。在那里,您可以检查所有路径的状态,并相应地进行归档,例如
-(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
中完成的,我对设置该值的副作用感到不舒服。例如,我想清理步骤应该是使用KVO。到目前为止,我喜欢activeProjects
set筛选!如果逻辑上设置该值具有这种效果,那么覆盖setter应该会让您感到“舒服”。这是核心数据对象图管理中非常常见的模式。