RestKit/Core Data: NSFetchedResultsController не распознает изменения сопоставленных объектов

Просто краткий обзор того, к чему относится моя проблема. Модель данных основана на двух классах NSManagedObject, называемых «Клиент» и «Резервирование». JSON, который я получаю от веб-сервиса, выглядит так:

"Reservation": {
    "Id": 1,
    "Reservation": "Just a description",
    "Note": "Just anything",
    "Customer": {
        "Id": 1,
        "Name": "Smith",
        "Firstname": "John",
        "Phonenumber": "00000"
    }
}

Я использую NSFetchedResultsController и его делегаты для управления представлением таблицы. Получение новой записи работает корректно. Мой код fetchController выглядит так:

fetchedResultsController = [Reservation fetchAllSortedBy:@"name" ascending:YES withPredicate:nil groupBy:@"name"];
fetchedResultsController.delegate = self;

Если что-то изменится в объекте Reservation, табличное представление также будет обновлено должным образом. Проблема возникает только тогда, когда что-либо изменяется в сопоставленном объекте «Клиент», например, имя, имя или номер телефона.

Проверка файла database.sql позволяет мне убедиться, что данные изменяются в базе данных, а RestKit/Core Data работает правильно. Кажется, что единственная проблема зависит от не вызываемых делегатов. Если я изменю атрибут в «Резервировании» и «Клиенте», делегаты будут правильно уволены (вероятно, из-за изменений в «Резервировании»), и табличное представление будет правильно обновлено для всех свойств «Клиент» и «Резервирование».

Если я закрою и снова открою приложение, табличное представление будет загружено так, как должно.


person netsplit    schedule 14.11.2012    source источник
comment
К сожалению, это именно так. Полученный контроллер результатов отслеживает только изменения свойств одного объекта (в вашем случае Reservation). Он не отслеживает изменения связанных объектов.   -  person Martin R    schedule 14.11.2012
comment
Я сначала тоже так подумал, но когда я реализую NSManagedObjectContextObjectsDidChangeNotification, уведомление содержит измененный связанный объект. Поэтому кажется, что Core Data распознает изменения, но не запускает делегатов. Есть ли другой способ обновить табличное представление связанных объектов?   -  person netsplit    schedule 15.11.2012
comment
Да, изменения распознаются, но FRC реагирует на изменения только для своей сущности. См. этот поток для аналогичного обсуждения: stackoverflow.com/questions /7533849/   -  person Martin R    schedule 15.11.2012
comment
Получаете ли вы обновления любых изменений, внесенных в ваши атрибуты верхнего уровня (на сервере), которые принадлежат объекту, для которого был создан fetchedResultsController? Для меня я не получаю обратные вызовы обновления даже для атрибутов объекта, для которого я создаю NSFetchedResultsController. Посмотрите это и ответьте, если у вас есть какие-либо подсказки: stackoverflow.com/questions/13457779/   -  person Raj Pawan Gumdal    schedule 19.11.2012
comment
Просто мысль здесь, но что, если вы настроите второй fetchedResultsController, используя сущность клиента? Разве тогда не будет запущен метод controllerDidChangeEvent: , и вы все равно сможете перезагрузить данные таблицы диаграммы?   -  person darkrat    schedule 06.04.2013