CoreData prepareForDeletion называется бесконечное время - PullRequest
0 голосов
/ 15 февраля 2012

Мое приложение поддерживает два NSManagedObjectContexts.Один запускается в главном потоке, другой обрабатывает сетевые события и запускается в фоновом потоке.

Всякий раз, когда получено сетевое событие:

  1. Основной MOC сохраняет
  2. Фоновый поток объединяет изменения
  3. Сетевое событие обрабатывается и изменения применяются к фону MOC
  4. Фон MOC сохраняет.
  5. Основной MOC объединяетизменения.

Это прекрасно работает, пока я не попытаюсь удалить NSManagedObject внутри основного потока:

a.prepareForDeletion снова вызывается в фоновом потоке после шага # 2

b.prepareForDeletion вызывается в главном потоке после шага # 5

Что хуже КАЖДЫЙ ВРЕМЯ, либо МОС сохраняет / объединяет мерзости a.и б.задняя их уродливая голова.

Насколько я могу судить, NSManagedObject воскрешается, затем удаляется, снова и снова.

Я вырываю волосы из-за этой проблемы.Я провел последнюю неделю, борясь, чтобы заставить работать несколько MOC.Я понятия не имел, что что-то такое простое вызовет столько горя.

1 Ответ

1 голос
/ 16 февраля 2012

Lorean,

Мой совет не поддерживать фоновый MOC.Скорее, всегда создавайте его, когда начинаете фоновую обработку.Таким образом, он всегда находится в том же состоянии, что и постоянное хранилище.(Кеш строк - ваш друг. Не беспокойтесь о состоянии фонового MOC.)

Эндрю

...