从核心数据中删除多余数据的有效方法

时间:2017-02-26 13:56:30

标签: ios swift core-data

我将一个或多个远程文件中的数据读入coredata。如果更改了远程文件,则需要更新核心数据中的数据。例如,假设一个文件填充了部门,另一个文件填充了员工。 在重组公司时,将重命名一个部门,并在文件中删除第二个没有员工的部门。员工文件没有更改,所以我只想重新阅读部门文件。在我的代码中,我读取了该文件,从coredata获取部门并更新其name属性。但由于第二个部门已不在文件中,我想从核心数据中删除它。 我的伪代码解决方案如下:

  • 部门实体获取hasChanged属性
  • 在从文件中读取之前,所有hasChanged属性都设置为false
  • 如果文件中存在某个部门,则其hasChanged属性设置为true
  • 读取文件后,将取出并删除hasChanged属性设置为false的所有部门

不知何故看起来效率不高。删除所有部门并构建新部门似乎效率也不高,因为核心数据将删除所有部门的员工,现在我也必须重新阅读员工(可能还有所有其他文件)。

有没有更好的方法来解决这个数据变得多余的问题?如果你用代码回答,最好是swift。

1 个答案:

答案 0 :(得分:0)

首先,删除规则不应该级联 - 将其更改为nullify。 从服务器获取新数据时,请按照以下步骤操作:

  1. 获取受影响的实体所有。如果您要更新部门 - 然后获取所有部门
  2. 将结果存储在ID为密钥的字典中。
  3. 还将所有结果存储在名为objectsToDelete
  4. 的可变集中
  5. 现在遍历从服务器获得的所有数据。使用您在步骤#2中创建的字典查找部门。如果找到该对象,则更新它并将其从步骤3中创建的集中删除。如果您没有找到该对象,请创建它。
  6. 如果objectsToDelete中还有任何对象,则删除它们
  7. 保存上下文。
  8. 员工的原则是一样的。您使用字典匹配已有的字典,并删除那些不匹配的字典。