У меня есть приложение для iPhone на базе Core Data, которое требует сохранения 1000 управляемых объектов при завершении. Это занимает 8+ секунд, однако ОС убивает приложение, если оно не завершается в течение ок. 6 секунд.
Я не хочу сохранять объекты раньше, потому что тогда пользователь должен ждать 8 секунд дольше, чтобы отобразились результаты.
Можно ли как-то сохранить объекты ранее в фоновом потоке, при этом все еще имея (только для чтения) доступ к NSManagedObjectContext в основном потоке для отображения данных? Или как-то возможно дублировать управляемые объекты и передать их в фоновый поток для сохранения?
Для пояснения, вот что сейчас происходит в приложении: у меня есть фоновый поток, который импортирует более 1000 объектов за 1 сек. Если я сохраняю во время импорта, это занимает намного больше времени, чем 1 сек. Таким образом, чтобы отобразить эти элементы с минимальной задержкой, контекст передается без сохранения в основной поток, и пользователь получает свои результаты как можно быстрее.
Теперь у меня есть проблема, как сохранить эти объекты без необходимости ждать 8 секунд. Если я сохраню в фоновом потоке перед передачей, пользователь должен ждать. Если я сохраню в переднем плане поток после передачи, пользователь должен ждать. Сейчас я вижу только два возможных подхода:
- Каким-то образом данные ядра получают доступ к sqlite в фоновом режиме, при этом основной поток остается реактивным
- Передача несохраненных объектов из одного контекста в другой и сохранение в фоновом потоке
Оба подхода кажутся невозможными (по крайней мере, в соответствии с документацией Core Data). Так нет ли другого решения, кроме как заставить пользователя подождать дольше (и, возможно, вывести на экран хороший вращающийся час: -)?
С уважением,
Jochen