我在两个表之间建立了多对多关系,比如表 A 和 B。
为了业务逻辑,我已将此属性设置为“无操作”作为删除规则。
第 1 步:现在我正在删除表 A 项。
第 2 步:删除表 A 项目后,我想删除表 B 中与表 A 中的任何项目无关的那些项目。
所以第 2 步删除的代码片段有点像这样:
for (TableBItem* item in fetchedObjects) {
if ([[item.tableAproperty allObjects] count] == 0) {
[context deleteObject:item];
}
}
//save context
[context save:&error]
在此之后,当我获取 tableB 对象时,它甚至会显示我试图删除的那些项目。
如果我终止应用程序并再次启动,那么获取项目将按预期工作。
知道这里可能出了什么问题。提前致谢。
最佳答案
实现此目的的一种行之有效的方法是在您的托管对象子类中为 TableBItem
重写删除对象 Xcode 生成的 setter 方法(顺便说一句,一个糟糕的名称 - 还有 tableAProperty
具有误导性,因为它是一种关系而不是属性)。
-(void)removeTableAPropertyObject:(TableAItem *)value {
[super removeTableAPropertyObject:value];
if (!self.tableAProperty.count) {
[self.managedObjectContext deleteObject:self];
}
}
关于ios - 核心数据删除的项目即使在删除后也是可见的(直到应用程序重新启动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20592472/