Как установить связь между двумя объектами, не выбирая их - PullRequest
0 голосов
/ 25 июня 2018

У меня есть две сущности: Project и Production

Каждый Project имеет много Productions. Таким образом, отношение проекта toMany

Я получаю все Projects и все Productions с двумя запросами по сети. Я сохраняю каждый проект в CoreData. Это около 100 тысяч проектов, и у меня уходит около 40 секунд, вот и все.

Получение около 100 тыс. Продукций и сохранение в CoreData занимают у меня 50 секунд. Тоже норм. Но я еще не установил отношения.

Итак, я устанавливаю цикл для всех проектов, которые были извлечены с помощью NSFetchRequest, для установки отношения при подготовке производства.

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

Этот цикл занимает много времени и ресурсов процессора. что-то около 10 минут с получением CPU Over Budget x2 при профилировании.

Если есть способ установить отношения без получения продукции, это было бы полезно, или у меня есть переключатель CoreData на SQLite или Realm?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете написать блок завершения и вызвать эту вторую функцию до конца завершения.

0 голосов
/ 25 июня 2018

Мое предложение состоит в том, чтобы создать оба объекта сущности одновременно и использовать кэш для объектов Project.

  • Включить обратную модель в модели.
  • Получить оба Projectи Production данные из сети.
  • Создание NSCache.
  • Начало создания объектов CoreData Production.
  • Проверьте, существует ли соответствующий ProjectОбъект в кеше.
  • Если он есть, задайте для свойства project объект Project.
  • Если его нет, создайте объект CoreData Project из соответствующих данных проекта.и положить его в кеш.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...