NSFetchedResultsController с backgroundContext и mainContext, неприятная ошибка - PullRequest
1 голос
/ 25 октября 2011

Я борюсь с ошибкой уже около 4 часов.Вот что у меня есть:

  • У меня есть TableViewController с NSFetchedResultsController, класс TableViewController реализует все методы делегата fetchedResultsController
  • При первом запуске приложения мои основные данныепусто
  • В фоновом потоке я загружаю вещи и добавляю их в основные данные, для этого у меня есть фоновый контекст управляемых объектов.
  • В контроллере табличного представления я регистрируюсь для NSManagedObjectContextDidSaveNotification и при сохранениифоновый контекст вызывается мой обратный вызов уведомлений, и я пытаюсь объединить основной контекст с фоновым.

enter image description here

Теперь неприятные вещи происходят здесь

  • Если мой делегат NSFetchedResultsController равен nil, и я выполняю mergeChangesFromContextDidSaveNotification: все работает, но мой пользовательский интерфейс не обновляется, и мне нужно выполнить еще один запрос fetch на моем fetchResultsController

  • Если я назначу делегатаNSFetchedResultsController приложение аварийно завершает работу, когда оно попадает в строку mergeChangesFromContextDidSaveNotification: (см. скриншот ниже)

enter image description here

Любые указатели о том, как заставить NSFetchedResultsController работать и исправлятьэта проблема будет очень признательна.

Спасибо, что нашли время, чтобы прочитать мой вопрос!

1 Ответ

2 голосов
/ 26 октября 2011

Если мой делегат NSFetchedResultsController равен нулю, а я mergeChangesFromContextDidSaveNotification: все работает, но мой пользовательский интерфейс не обновляется, и я должен сделать еще один fetchRequest на моем fetchResultsController

Это ожидаемое поведение, поскольку делегат является единственным объектом, который вынуждает UI обновляться.

Если я назначу делегата в NSFetchedResultsController, приложение падает, когда доходит до mergeChangesFromContextDidSaveNotification: строка (см. скриншот ниже)

Процесс слияния контекста будет запускать уведомления, пока он продолжается, поэтому методы NSFetchedResultsControllerdelegate можно вызывать во время слияния. Если назначением делегата является изменение only , которое вызывает сбой, то ошибка должна быть в методах делегата NSFetchedResultsController независимо от того, где отладчик отображает ошибку.

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