NSFetchedResultsController пропускает обновления в объединенном NSManagedObjectContext - PullRequest
6 голосов
/ 01 июня 2011

У меня есть два контекста управляемого объекта, A и B. Эти два контекста синхронизируются путем объединения изменений из одного в другой при каждом сохранении (путем мониторинга NSManagedObjectContextDidSaveNotification). Я проверил, что изменения в A и B сливаются правильно.

У меня есть NSFetchedResultsController мониторинг обновлений для B. Я считаю, что некоторые обновления для A не приводят к запуску nsfrc на B. Когда создается новый управляемый объект и добавляется в A с атрибутами, которые ищет nsfrc (на B), nsfrc срабатывает после слияния изменений B с сохранением A. Однако, если управляемый объект уже существует на A (и B), и я изменяю объект и сохраняю A, в то время как я вижу, что B объединяется изменения из уведомления о сохранении A, мониторинг B nsfrc не запускается.

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 04 июля 2011

У меня была эта проблема, и, кажется, я ее решил. Я не знаю, что именно я сделал. Я имею в виду, что сделал пару вещей и не знаю, какая из них стала решением. Так что я просто опишу ...

Я изменил код, чтобы следовать некоторым «подсказкам», найденным в официальных документах и ​​на некоторых форумах:

  1. Если вы управляете NSManagedObjectContext в другом потоке, он должен быть создан в этом потоке, а не каким-либо образом туда пропущен.
  2. Вы должны добавить наблюдателя (чтобы получать уведомления о сохранении для слияния) только в основном потоке - таким образом, они также будут объединены в основном потоке.
  3. (Необязательно, но я это сделал). Вы можете попытаться сохранить контекст в основном потоке, даже если он был создан и управляется в фоновом потоке.

1 & 3 больше напоминает какую-то «магию», поэтому я думаю, что вы должны сначала попытаться следовать 2. Надеюсь, это поможет вам.

0 голосов
/ 05 июля 2011

Не уверен, что это решит вашу проблему, но попробуйте вызвать processPendingChanges в контексте B после объединения изменений из A.

Кроме того, ваш nsfrc использует кеширование? Попробуйте отключить кеш и посмотрите, имеет ли это значение в вашем случае ...

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