1

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

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

由于我在循环时修改了数组“对象”的内容,我担心我的代码有点不安全。当然,这一切都取决于幕后如何处理,我不知道。

谢谢。

4

2 回答 2

1

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

从文档:

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

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

于 2012-07-17T09:05:04.273 回答
1

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

NSError *error;
if (![context save:&error]) {
    return;
}
于 2012-07-17T13:28:57.097 回答