我正在从核心数据中删除托管对象,如下所示:
[item.managedObjectContext deleteObject:item];
(请注意,此项目已创建,但此时未保存。)
尝试修复错误,我想确认该项目确实已删除。首先,因为每个'item'都属于'list',所以我记录了list.items之前和之后的计数。没有变化。嫌疑。
为了加倍确定,我在删除之前和之后添加了一个获取请求,并记录了上下文中的项目总数。这就是它变得奇怪的地方。
我发现执行fetch的行为删除了我的初始错误。换句话说,如果我在删除之前和之后执行提取,我可以清楚地看到上下文中的项目数减少了一个。但是,如果没有此提取,则不会删除该项目(或至少不会立即删除)。
有没有人对这里发生的事情有所了解?
答案 0 :(得分:1)
deleteObject
方法实际上并没有删除对象 - 它将其标记为删除。在提交更改之前,实际上并未进行更改。
已编辑添加
根据评论扩大答案:
如果您想知道上下文是否已更改,以便知道何时触发获取请求,那么您可以注册以观察在上下文中的对象发送deleteObject消息时发送的NSManagedObjectContextObjectsDidChangeNotification
。