Ios 清除核心数据中的上下文:重置还是删除已注册对象?

Ios 清除核心数据中的上下文:重置还是删除已注册对象?,ios,core-data,reset,nsmanagedobjectcontext,Ios,Core Data,Reset,Nsmanagedobjectcontext,我正在寻找关于这个的帖子,但我不完全理解。。。以下两者之间的区别是什么: [context reset]; 以及: 或者它们是等价的 感谢使用重置将托管对象上下文恢复到您第一次创建它时的状态--在您执行任何提取、创建任何新对象等之前。如果内存中有任何托管对象是从该上下文提取的,则它们现在不可用。使用重置不会影响持久存储文件。所有实例在之后仍然存在,只是它们不在内存中。它们可以再次取回 使用deleteObject从持久存储中删除对象。它已经不存在了。无法再提取它,因为它不存在。首先,重置会影响

我正在寻找关于这个的帖子,但我不完全理解。。。以下两者之间的区别是什么:

[context reset];
以及:

或者它们是等价的


感谢

使用
重置
将托管对象上下文恢复到您第一次创建它时的状态--在您执行任何提取、创建任何新对象等之前。如果内存中有任何托管对象是从该上下文提取的,则它们现在不可用。使用
重置
不会影响持久存储文件。所有实例在之后仍然存在,只是它们不在内存中。它们可以再次取回


使用
deleteObject
从持久存储中删除对象。它已经不存在了。无法再提取它,因为它不存在。

首先,重置会影响一切,而deleteObject允许您删除一个对象。@LordZsolt但假设您正在循环所有上下文的注册对象。。。相同吗?测试:向核心数据添加10个对象并保存它们。之后,修改代码以调用reset(在对象保存到持久存储之后)。现在看看你是否取回了所有的对象,你是否还保留着它们或者它们已经被删除了。我知道
deleteObject:
也会从持久性存储中删除对象,但是我不知道reset是这样做的,还是只删除NSManagedObjectContext中的对象。很抱歉,我不是自己编写的,但是我目前还没有准备好CoreData的应用程序。@LordZsolt我用
deleteObject:
方法做了一个测试,它看起来仍然在持久存储中……您必须在context.delete(对象)之后调用context.save(),以反映持久存储中的删除。谢谢。我正在做一些测试,我不知道为什么,在调用了上下文中所有注册对象的
deleteObject:
之后,我仍然将它们保存在持久存储中,并且
context.registeredObjects.count
仍然是>0。如果调用
[context reset]
,则
context.registeredObjects.count
如我所料为0。。。为什么会发生这种情况?您是否保存了更改?@AppsDev您需要在上下文中调用save来删除更改。
for (NSManagedObjectID *objId in objectIds) {
  [context deleteObject:[context objectWithID:objId]];
}