Core Data 上下文更改合并与不同设置的优劣势分析
1. 上下文更改合并
在多上下文环境中,将一个上下文的更改合并到另一个(或多个)上下文相对简单,具体步骤如下:
1. 添加 Core Data 的 context-did-save 通知的观察者。
2. 在观察者代码中,使用 perform 调度到目标上下文的队列。
3. 在该队列上调用 mergeChanges(fromContextDidSave:) 方法,并将通知作为参数传入。
在合并过程中,Core Data 会从通知中的对象提取对象标识符,因为对象只能在其自身上下文的队列上访问。目标上下文获取对象 ID 列表后,将按以下方式处理更改:
- 插入对象 :插入的对象将被作为故障(fault)引入上下文。若无人对插入对象持有强引用,这些故障将在合并后被释放。不过,在监听 objects-did-change 通知时,你有机会保留这些对象。
- 更新对象 :上下文中已注册的更新对象将被刷新,其他更新将被忽略。若更新对象在目标上下文中有未决更改,更改将逐属性合并,冲突时目标上下文的更改优先。
- 删除对象 :上下文中已注册的删除对象将被移除,其他删除将被忽略。若删除对象在目标上下文中有未决更改,仍将被删除。若你正在使用该对象,需相应处理,避免异常。
合并完成后,会调用 processPendingChanges
超级会员免费看
订阅专栏 解锁全文
2866

被折叠的 条评论
为什么被折叠?



