Базовые данные не могут выполнить ошибку для объекта после получения
Я получаю данные с веб-сервера, обрабатываю их в дочернем частном фоновом контексте, называемом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...
Если у вас есть какие-либо советы, которые могут привести меня в правильном направлении, пожалуйста, поделитесь. Спасибо
Edit: Итак, изначально я вызывал receivePermanentIDsForObjects для backgroundMOC, который является дочерним по отношению к mainMOC, который является дочерним по отношению к masterMOC. Я переключил его, чтобы получить идентификаторы на mainMOC, и это решило все мои проблемы (на данный момент). Я никогда не должен был вызывать receivePermIds для дочернего контекста?