Я получаю данные с веб-сервера, обрабатывая его в дочернем закрытом фоновом контексте с именем backgroundMOC
. Это дочерний элемент mainMOC
, который связан с основным пользовательским интерфейсом, поэтому сохранение в backgroundMOC
изменений пользовательского интерфейса триггеров. mainMOC
- это дочерний элемент masterMOC
, который является частной фоновой очереди, привязанной к постоянному хранилищу, поэтому сохранение на главном диске сохраняется на диск.
Теперь я получаю данные, создаю новые объекты на backgroundMOC
, а затем сохраняю backgroundMOC
(так что обновляется пользовательский интерфейс), сохраняйте mainMOC
, (так что я могу почти сохранить на диск) и сохранить masterMOC
(чтобы я мог, наконец, записать на диск). Проблема заключается в том, что когда объект появляется в пользовательском интерфейсе с помощью выбранного контроллера результатов, objectId
по-прежнему является временным.
Это вызывает проблемы с повторяющимися проблемами строк, где, если я получаю те же данные с сервера (случайно), мой backgroundMOC
не знает, что этот объект уже существует, поскольку ему не был назначен постоянный идентификатор, поэтому он создает другой объект. Когда я перезапускаю приложение, дублирующий объект исчезает, поэтому я знаю, что это просто проблема с сопоставлением идентификаторов.
Итак, я подумал, что могу попробовать
[backgroundMOC obtainPermanentIDsForObjects:backgroundMOC.registeredObjects.allObjects error:nil];
перед сохранением вообще (я тоже пробовал после сохранения). Однако по какой-то причине вызов этой строки генерирует исключение:
CoreData could not fulfill a fault for...
Если у вас есть какие-то намеки, которые могут привести меня в правильном направлении, пожалуйста, поделитесь. Благодаря
Изменить: Хорошо, поэтому изначально я вызывал getPermanentIDsForObjects на backgroundMOC, который является дочерним элементом mainMOC, который является дочерним элементом masterMOC. Я переключил его так, чтобы получить идентификаторы на mainMOC, и он решил все мои проблемы (пока). Я никогда не должен был называть getPermIds для детского контекста?