Это немного сложнее.
У меня есть Document
сущности, которые в настоящее время импортируются в CoreData из базы данных SQLite в фоновом потоке. Для фонового потока существует отдельный контекст, и я сохраняю данные каждые 500 записей.
Сохранение контекста фонового потока вызывает уведомление, которое захватывает контексты моего основного потока и выполняет слияние между ними.
Все работает как положено, если я импортирую только document
сущностей.
Моя проблема возникает, когда я пытаюсь установить связь между текущим document
, который создается, другой сущностью, называемой briefcase
.
Вот что сейчас делает моя процедура импорта:
- Создать
Briefcase
сущность
- Перебирает строки базы данных SQLite и создает
Document
сущностей для каждой строки
- Создать связь между документом в цикле и сущностью портфеля
- На каждые 500 строк я сохраняю и сбрасываю контекст. Это вызывает уведомление
ContextSave
, которое захватывает основной поток и сливается с контекстом основного потока.
- Здесь моя проблема : после сохранения и сброса выше, моя сущность
Briefcase
объединяется с основным потоком, поэтому, когда мой цикл продолжается, следующая созданная сущность документа пытается связать себя с портфель, где я получаю сбой, говоря, что не могу установить отношения между объектами в отдельных потоках.
Я знаю, что если я удаляю вызов для сброса контекста после его сохранения, все работает как положено, но мой объем памяти увеличивается, и я не готов это принять.
Итак, мой вопрос:
Можете ли вы придумать способ сохранения сущности портфеля (и действительной) для всего процесса импорта, чтобы я мог продолжать создавать отношения?
Моей первой мыслью было создать портфель без контекста, а затем добавить его в контекст после завершения всего процесса. Это не сработало очень хорошо (оно вылетело при создании).
Ваши мысли очень ценятся.
Рог