为什么删除Core Data的NSManagedObject需调用context.delete而非仅移除数组元素
问题解答
- 你自己定义的
var itemArray = [Item]()只是一个普通的Swift集合类型,和Core Data的持久化框架没有内置绑定,它的作用仅仅是暂存你从Core Data查询到的Item实例,你对这个数组本身的增删操作,完全不会被Core Data感知到。 - 所有
NSManagedObject子类的实例从创建开始,就会被关联的NSManagedObjectContext(托管上下文)全程追踪状态:- 当你修改实例的
Done、Title等属性时,上下文会自动将该实例标记为已更新状态,调用context.save()时,上下文会扫描所有状态发生变更的实例,把更新内容同步到Persistent Container的持久化存储中。 - 当你只执行
itemArray.remove(at:)时,只是把目标实例从你自己的数组容器中移除,没有对实例本身做任何操作,上下文完全不会感知到这个行为,也不会给实例标记删除状态,save()操作自然不会触发持久化层的删除逻辑。 - 只有主动调用
context.delete(目标Item实例),才会给该实例打上已删除的标记,调用save()时上下文才会将对应的条目从持久化存储中移除。
- 当你修改实例的
内容的提问来源于stack exchange,提问作者Akif Acar
相关产品推荐
相关产品推荐

