NSFetchedResultsController не показывает обновления из других контекстов - PullRequest
5 голосов
/ 28 января 2010

У меня есть NSFetchedResultsController, настроенный для заполнения UITableView, на основе моего «основного» NSManagedObjectContext.

В таймере я постоянно добавляю объекты в отдельный NSManagedObjectContext, но тот, который разделяет свой NSPersistantStoreCoordinator с основным контекстом.

Я вижу отправку уведомлений NSManagedObjectContextWillSaveNotification, и когда я завершаю перезапуск приложения, у меня есть все данные из предыдущего запуска. Однако с текущим NSFetchedResultsController обновлений не происходит.

Я создал тестовый проект и поместил его здесь .



(Первоначально я думал, что это происходит из-за того, что в игре присутствует несколько потоков; однако это происходит, когда все выполняется в одном потоке).

Оригинальный вопрос

У меня есть NSFetchedResultsController, настроенный для заполнения UITableView, на основе моего «основного» NSManagedObjetContext.

В фоновом потоке я загружаю и импортирую несколько объектов в отдельный NSManagedObjectContext, но тот, который разделяет свой NSPersistantStoreCoordinator с контекстом основного потока.

Я зарегистрирован, чтобы получать уведомления NSManagedObjectContextWillSaveNotification. Когда я получаю их, я пересылаю их в основной поток и передаю их в мой основной контекст.

Используя отладчик, я могу наблюдать, как они приходят, и проверять, действительно ли они добавляют объекты в контекст. Тем не менее, мой NSFetchedResultsController не обновляется. Если я делаю все это в основном потоке, это работает. Вызов -performFetch: на контроллере приведет к его обновлению, поэтому я знаю, что это не значит, что он не видит новые объекты.

В основном это стандартный код, просто разбитый на разные потоки.

1 Ответ

11 голосов
/ 29 января 2010

Получаете ли вы какие-либо обратные вызовы делегатов от NSFetchedResultsController? Если нет, то это может быть ошибкой самого NSFetchedResultsController. Я бы порекомендовал создать тестовый проект, который может подтвердить / опровергнуть эту проблему в отдельности.

Если вы можете дублировать его отдельно;

  1. Я бы с удовольствием это увидел:)
  2. Подайте радар в Apple.

После просмотра кода ответом будет изменение наблюдателя вашего уведомления с NSManagedObjectContextWillSaveNotification на NSManagedObjectContextDidSaveNotification. Вы отправляли сообщение как раз за до сохранения, вызвавшего ваши проблемы.

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