Фоновое сохранение с Базовыми Данными?

У меня есть Базовое основанное на данных приложение для iPhone, которое должно сохранить 1 000 управляемых объектов после завершения. Это берет 8 + секунды, однако, ОС уничтожает приложение, если это не завершается приблизительно за 6 секунд.

Я не хочу сохранять объекты ранее, потому что тогда пользователь должен ожидать 8 секунд дольше, чтобы результаты отобразились.

Действительно ли возможно так или иначе сохранить объекты ранее в фоновом потоке при тихом наличии доступа (только для чтения) к NSManagedObjectContext в основном потоке для отображения данных? Или так или иначе возможно копировать управляемые объекты и передать дубликаты фоновому потоку для сохранения?

Для разъяснения вот то, что происходит в приложении теперь: у Меня есть фоновый поток, который импортирует 1000 + объекты приблизительно за 1 секунду. Если я сохраняю при импорте, требуется намного, чем 1 секунда. Таким образом, для отображения тех объектов с минимальной задержкой, контекст передан, не сохраняя к основному потоку, и пользователь получает свои результаты максимально быстро.

У меня теперь есть проблема, как сохранить эти объекты без пользователя, имеющего необходимость ожидать 8 secs. Если я сохраняю в фоновом режиме поток, прежде чем передача, пользователь должен будет ожидать. Если я сохраняю в приоритетном потоке после того, как передача, пользователь должен будет ожидать. Только два возможных подхода, которые я вижу прямо сейчас:

  1. Так или иначе имея базовые данные, делающие его sqlite доступы в фоновом режиме, все еще сохраняя основной поток реактивным
  2. Вручение объектов, несохраненных от одного контекста до другого и сохранение в фоновом режиме, распараллеливают

Оба подхода кажутся невозможными (по крайней мере, согласно Базовой документации Данных). Так нет ли никакое другое решение, чем сделать, чтобы пользователь ожидал дольше (и, возможно, отобразите хорошее стекло часа вращения:-)?

С уважением, Jochen

9
задан Jochen 27 January 2010 в 03:57
поделиться

1 ответ

Да, есть способ сохранить контекст управляемого объекта из фонового потока, точнее, это обычно называют "импортом в фоновом потоке и отображением в главном потоке". Таким образом, управляемые объекты сохраняются по частям при импорте, а не все сразу при завершении.

Я только что написал короткий ответ на подобный вопрос здесь, в SO, но вы должны прочитать это Apple doc. Есть много потенциальных подводных камней, так что читайте очень, очень внимательно. А затем прочитайте Apple's "Эффективный импорт данных". Это тоже обязательное чтение! И еще, полезной является книга Маркуса Зарры CoreData book.

Многопоточность CoreData немного хитрая, но она действительно окупается. Удачи!

8
ответ дан 3 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: