Я получаю данные с веб-сервера, обрабатывая их в дочернем частном фоновом контексте с именем 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 в дочернем контексте?