2013-07-05 3 views
1

У меня есть NSFetchedResultsController, привязанный к моему основному контексту управляемых объектов. Он отвечает за хранение данных для представления таблицы в моем основном представлении.iOS5 NSFetchedResultsController не получает обновления для удаления

У меня есть NSOperation, работающий на фоновом потоке, который обновляет/удаляет управляемые объекты, отслеживаемые контроллером результатов. Я создаю дочерний контекст (частный тип параллелизма/parent = основной управляемый объект) в объектах nsoperation и insert/delete. Когда он будет завершен, он сохранит свой контекст, а также родительский контекст.

Что интересно и очень неприятно, так это то, что это отлично работает в iOS 6. Когда я вставляю или удаляю объекты, мой обработчик получаемых результатов уведомляется об изменениях, и все работает так, как ожидалось. Однако на iOS 5 все работает, за исключением удалений. Контроллер получаемых результатов не уведомляется об удалении. Однако ... если я вручную обновить выбранный контроллер результатов (сделав его нулевым и повторив один и тот же предикат), тогда он покажет ожидаемый результат.

Кроме того, когда я регистрируюсь для изменения/сохранения уведомлений в основном контексте, я вижу, что словарь пользовательской информации содержит объекты, которые я удалил ... даже в iOS 5!

Один вопрос, который, как я думал, может быть, но я не думаю, что держится, потому что я удалил факторы, заключается в том, что этот объект находится во многих отношениях с другим объектом. Объект, который я удаляю/вставляю, является «сотрудником», и он имеет отношения с «отделом». Сотрудник настроен на аннулирование, а отдел настроен на каскад.

Как я уже сказал, это работает отлично в iOS6, но не в iOS5.

Любые советы были бы очень полезными.

ответ

1

Эта ошибка связана с сохранением в постоянном магазине. Этот дочерний контекст сохраняет себя, а затем вызывает выполнение блока на его родительском, главном контексте управляемых объектов. Когда сохраняется основной контекст управляемого объекта, он запускает фоновый контекст для записи в постоянное хранилище. Когда я удалил фоновое сохранение контекста, выбранный контроллер результатов обновился, как ожидалось.

Что-то интересное, что я обнаружил, что, вероятно, это вызвало то, что управляемый объект протекал каждый раз, когда я пытался сохранить его в магазине. Не совсем точно, как это исправить, но хорошо знать причину этого.

Смежные вопросы