UIManagedDocument и NSFetchedResultsController

У меня проблемы с сохранением объекта с помощью UIManagedDocument. У меня есть NSFetchedResultsController с его контекстом, установленным как контекст UIManagedDocuments. Я установил контроллер с разделами. Пользователь добавляет запись в контекст UIManagedDocuments, и я сохраняю контекст, используя: [context save: & error]; и мой NSFetchedResultsController обновляется правильно.

Если я выйду из представления, которое имеет NSFetchedResultsController, а затем вернусь к представлению, в котором я создаю новый NSFetchedResultsController с тем же контекстом UIManagedDocuments, я получаю сообщение об ошибке, когда вызываю: [fetchedResultsController performFetch: & error];

Ошибка говорит:

CoreData: ошибка: (NSFetchedResultsController) Выбранный объект по индексу имеет неправильное имя раздела '. Объекты должны быть отсортированы по названию раздела »

и выборка не удалась.

Если я немного подожду, прежде чем вернуться к просмотру, я не получу сообщение об ошибке. Я знаю, что операция сохранения выполняется в дочернем контексте, а затем вносятся изменения в родительский контекст, и я думаю, что это как-то связано с проблемой. у кого-нибудь есть решение?


person jonusx    schedule 31.01.2012    source источник


Ответы (1)


Согласно справочнику UIManagedDocument, вы не должны сохранять через NSManagedObjectContext. Сохранение должно выполняться через соответствующие API-интерфейсы UIManagedDocument. К сожалению, в документе не совсем ясно, что вам следует использовать.

Если вы используете диспетчер отмены, этот путь должен гарантировать, что все правильно помечено как грязное и сохранено. Точно так же, используя явный вызов

[document updateChangeCount:UIDocumentChangeDone];

должен обеспечивать аналогичную функциональность. Однако сохранение будет отложено, потому что оно выполняется в отдельном потоке.

person Jody Hagins    schedule 10.04.2012
comment
Большое спасибо, у меня была точно такая же проблема, и проблема была в использовании [document.managedObjectContext save:]. Удалите сохранение, и все прошло отлично. - person Alfonso; 13.04.2012