核心数据 - 删除项目

时间:2012-07-17 01:41:46

标签: core-data ios4 iphone-sdk-3.0

由于对我的一些代码有些怀疑,我有一个问题。在NSManagedObject的数组中,我需要摆脱其中的一些。 这是(下面)我使用的代码。在我的经验范围内,我必须说它有效。所以我的问题更多的是确保我没有做错事而不是解决现有问题

for (NSManagedObject *item in objects) {
    if ([[item valueForKey:@"OK"] intValue]>1) {
        [context deleteObject:item];
        continue;
    }
}

由于我在循环时修改数组“对象”的内容,我担心我的代码有些不安全。 当然这一切都取决于场景背后的处理方式,我不知道。

感谢。

2 个答案:

答案 0 :(得分:1)

当您调用deleteObject:时,您正在标记要删除的对象,而不是立即删除它,当然也不会从迭代期间迭代的集合中删除它。

来自文档:

  

指定在提交更改时应从其持久性存储中删除的对象。

如果在deleteObject:调用后检查已删除的项目,您将看到对象仍然存在,但其isDeleted标记设置为YES。下次保存NSManagedObjectContext时,实际上会删除该对象。

答案 1 :(得分:1)

您只是使用deleteObject行标记要删除的项目。为了强制上下文执行删除,请在函数的底部运行:

NSError *error;
if (![context save:&error]) {
    return;
}