如何在不获取两个对象的情况下设置它们之间的关系

时间:2018-06-25 05:57:00

标签: swift core-data

我有两个实体:ProjectProduction

每个Project都有许多Productions。所以项目的关系是toMany

我得到所有Projects和所有Productions两个网络请求。我将每个项目都保存到CoreData中。大约有10万个项目,大约要花40秒钟,没关系。

获得大约100k Productions并保存到CoreData需要我50秒钟。也可以。但是我还没有建立关系。

因此,我在所有用NSFetchRequest提取的项目上设置一个循环,以设置准备生产中的关系。

for project in Project.getAll() {
    project.addToProductions(Produciton.getProductionById(project.producionId))
}

此循环需要大量时间和CPU。 CPU Over Budget x2进行概要分析大约需要10分钟。

如果有一种方法可以建立关系而又不影响作品,或者我已经将CoreData切换为SQLiteRealm

2 个答案:

答案 0 :(得分:1)

我的建议是同时创建两个实体对象,并为Project对象使用缓存。

  • 在模型中启用逆关系。
  • 从网络中同时获取ProjectProduction数据。
  • 创建一个NSCache
  • 开始创建CoreData Production对象。
  • 查看缓存中是否有相应的Project对象。
  • 如果有一个,将project属性设置为Project对象。
  • 如果没有,则从相应的项目数据中创建CoreData Project对象,并将其放入缓存中。

答案 1 :(得分:0)

您可以编写一个完成代码块,并调用第二个函数以结束操作。