Я работаю над iPhone-приложением, которое использует Core Data. Приложение делает вызов веб-службы, анализирует полученный XML файл, а затем создает или изменяет объекты Core Data в моем приложении. Я уже обрабатываю вызов веб-службы и анализирую асинхронно, но я передавал анализируемые данные обратно в основной поток, чтобы манипулировать объектами Core Data. Я также хотел бы запустить этот процесс в фоновом потоке. (1-2-секундная пауза не создает большой опыт пользователя)
Очевидным подходом было бы создание контекста управляемого объекта специально для фонового потока, но затем я прочитал эту строку в Руководство по программированию ядра Apple Core:
Постоянный координатор хранилища предоставляет своим управляемым объектам контексты фасад одного виртуального хранилища. Для полностью параллельных операций вам нужен другой координатор для каждого потока.
Итак, вот улов: у вас не может быть двух NSPersistentStoreCoordinator
, обеспечивающих доступ к одному и тому же хранилищу. Но в книге Core Data Marcus Zarra утверждается, что NSPersistentStoreCoordinator
является потокобезопасным и будет сериализовать запросы ввода-вывода (стр. 157).
Может кто-нибудь прояснить это для меня? Возможно ли иметь второй контекст управляемого объекта, работающий на отдельном потоке, который имеет один и тот же NSPersistentStoreCoordinator
с основным потоком? Или, более лаконично, NSPersistentStoreCoordinator
поточно-безопасный?