У меня есть Базовое основанное на данных приложение для iPhone, которое должно сохранить 1 000 управляемых объектов после завершения. Это берет 8 + секунды, однако, ОС уничтожает приложение, если это не завершается приблизительно за 6 секунд.
Я не хочу сохранять объекты ранее, потому что тогда пользователь должен ожидать 8 секунд дольше, чтобы результаты отобразились.
Действительно ли возможно так или иначе сохранить объекты ранее в фоновом потоке при тихом наличии доступа (только для чтения) к NSManagedObjectContext в основном потоке для отображения данных? Или так или иначе возможно копировать управляемые объекты и передать дубликаты фоновому потоку для сохранения?
Для разъяснения вот то, что происходит в приложении теперь: у Меня есть фоновый поток, который импортирует 1000 + объекты приблизительно за 1 секунду. Если я сохраняю при импорте, требуется намного, чем 1 секунда. Таким образом, для отображения тех объектов с минимальной задержкой, контекст передан, не сохраняя к основному потоку, и пользователь получает свои результаты максимально быстро.
У меня теперь есть проблема, как сохранить эти объекты без пользователя, имеющего необходимость ожидать 8 secs. Если я сохраняю в фоновом режиме поток, прежде чем передача, пользователь должен будет ожидать. Если я сохраняю в приоритетном потоке после того, как передача, пользователь должен будет ожидать. Только два возможных подхода, которые я вижу прямо сейчас:
Оба подхода кажутся невозможными (по крайней мере, согласно Базовой документации Данных). Так нет ли никакое другое решение, чем сделать, чтобы пользователь ожидал дольше (и, возможно, отобразите хорошее стекло часа вращения:-)?
С уважением, Jochen
Да, есть способ сохранить контекст управляемого объекта из фонового потока, точнее, это обычно называют "импортом в фоновом потоке и отображением в главном потоке". Таким образом, управляемые объекты сохраняются по частям при импорте, а не все сразу при завершении.
Я только что написал короткий ответ на подобный вопрос здесь, в SO, но вы должны прочитать это Apple doc. Есть много потенциальных подводных камней, так что читайте очень, очень внимательно. А затем прочитайте Apple's "Эффективный импорт данных". Это тоже обязательное чтение! И еще, полезной является книга Маркуса Зарры CoreData book.
Многопоточность CoreData немного хитрая, но она действительно окупается. Удачи!