核心数据删除项目即使在删除后也可见(直到应用程序重新启动)

时间:2013-12-15 08:02:49

标签: ios core-data ios7

我在两个表之间有多对多的关系,比如表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对象时,它甚至会向我显示我试图删除的那些项目。

如果我终止应用程序并再次启动,则提取项目按预期工作。

知道这里可能出现的问题。提前致谢。

2 个答案:

答案 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. 我不能真正给你解释重新启动后的差异,我猜一些陈旧或缓存/错误效应。