我在两个表之间有多对多的关系,比如表A和B.
为了业务逻辑,我将此属性设置为“No Action”作为删除规则。
第1步:现在我正在删除表A项。
步骤2:删除tableA项目后,我想删除表B中与表A中任何项目无关的项目。
所以删除第2步的代码片段有点像这样:
for (TableBItem* item in fetchedObjects) {
if ([[item.tableAproperty allObjects] count] == 0) {
[context deleteObject:item];
}
}
//save context
[context save:&error]
在此之后,当我获取tableB对象时,它甚至会向我显示我试图删除的那些项目。
如果我终止应用程序并再次启动,则提取项目按预期工作。
知道这里可能出现的问题。提前致谢。
答案 0 :(得分:1)
实现此目的的一种经过验证的方法是覆盖托管对象子类中TableBItem
的删除对象Xcode生成的setter方法(一个可怕的名称BTW - 同样,tableAProperty
具有误导性,因为它是一个关系而不是属性)。
-(void)removeTableAPropertyObject:(TableAItem *)value {
[super removeTableAPropertyObject:value];
if (!self.tableAProperty.count) {
[self.managedObjectContext deleteObject:self];
}
}
答案 1 :(得分:0)
我想到的一件事是将删除规则设置为'nullfiy'。这样,删除实体A将使从B到A的关系无效。因此,在删除所有A之后,没有B将链接到A. 我不能真正给你解释重新启动后的差异,我猜一些陈旧或缓存/错误效应。