1

我正在从核心数据中删除一个托管对象,如下所示:

[item.managedObjectContext deleteObject:item];

(请注意,此项目已创建,但此时未保存。)

试图修复一个错误,我想确认该项目确实已被删除。首先,由于每个“项目”都属于一个“列表”,我记录了 list.items 前后的计数。没有变化。怀疑。

为了更加确定,我在删除前后添加了一个获取请求,并记录了上下文中的项目总数。这就是它变得奇怪的地方。

我发现执行 fetch 的行为消除了我最初的错误。换句话说,如果我在删除前后执行一次 fetch,我可以清楚地看到上下文中的项目数减少了一个。但是,如果没有此获取,则不会删除该项目(或至少不会立即删除)。

有没有人对这里发生的事情有所了解?

4

1 回答 1

1

deleteObject方法实际上并没有删除该对象 - 它会将其标记为删除。在提交更改之前,实际上并未进行更改。

编辑添加

为了响应评论扩展答案:

如果您想知道上下文是否已更改,以便知道何时触发 fetch 请求,那么您可以注册以观察NSManagedObjectContextObjectsDidChangeNotification上下文中的对象发送 deleteObject 消息时发送的内容。

于 2012-09-06T20:39:33.663 回答