Обновление результатов NSFetchedResultsController без новой выборки - PullRequest
7 голосов
/ 15 июня 2009

Я работаю над приложением, которое хранит свои данные на внешнем сервере MySQL, но кэширует его локально, используя Core Data для лучшего времени отклика. По сути, я хотел бы сделать следующее:

  1. Извлечение данных из Core Data (хранилище данных SQLite, используя NSFetchedResultsController) и отображение их
  2. Получение новых элементов с сервера MySQL в фоновом режиме
  3. Обновление текущего табличного представления новым набором данных (как новых, так и старых элементов)

У меня все это работает, кроме последнего шага. Я не могу понять, как заставить NSFetchedResultsController обновить свой набор данных. До сих пор я пытался добавить элементы непосредственно в его NSManagedObjectContext:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
                              inManagedObjectContext:[fetchedResultsController
                                                      managedObjectContext]];

Я также попробовал то, что Apple делает в своем примере с CoreDataBook, и использовал отдельный контекст «добавления» управляемого объекта и вызов mergeChangesFromContextDidSaveNotification:. Похоже, что ни один из них не изменяет набор NSManagedObject * в настоящее время в контексте управляемого объекта выбранного контроллера результатов.

Как бы я обновил набор объектов, которыми в настоящее время управляет NSFetchedResultsController?

Ответы [ 2 ]

7 голосов
/ 01 июля 2009

просто есть ваша проблема, и да, по-видимому, использование уведомлений - это единственный способ обновить таблицу, когда таблица использует контроллер nsfetchedresults.

как в примере с базой данных:
step1: добавить наблюдателя в NSNotificationCenter для уведомления NSManagedObjectContextDidSaveNotification
step2: сохранить ваш контекст (триггер уведомления для вашего селектора)
step3: в вашем методе селектора: объедините изменения в контексте, используя метод mergeChangesFromContextDidSaveNotification
step4: удалить наблюдателя из центра уведомлений.

Лично я бы хотел обойти проверку уведомлений и сказать только контексту, обновите себя, черт побери:)

4 голосов
/ 16 июня 2009

Я обнаружил, что моя проблема не в том, что объекты не обновлялись, а в том, что экземпляр NSFetchedResultsController, который у меня был, не обновлял должным образом заголовки его разделов, и поэтому я не мог видеть результаты в своем UITableView.

Обновление контекста управляемого объекта из контроллера выбранных результатов делает обновление набора объектов результатов контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...