Core Data не удалось устранить ошибку для объекта после получения PermanentIDs

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

15
задан Cœur 15 March 2018 в 11:21
поделиться