Невозможно удалить наблюдателя ... для ключевого пути "..." из ..., поскольку он не зарегистрирован в качестве наблюдателя - PullRequest
3 голосов
/ 13 августа 2011

У меня есть модель базовых данных с двумя объектами: A и B. A имеет отношение к одному или нескольким B.B имеет свойство bValue.

Я создаю много экземпляров класса, и некоторые из них вызывают уведомление.Это уведомление называется методом, который создает новый объект B и добавляет его к A. Экземпляры создаются с использованием NSThread, чтобы сделать пользовательский интерфейс более отзывчивым.

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

Тогда я получаю это исключение:

Cannot remove an observer <NSArrayController 0x10016c150> for the key path "bValue" from <bValue 0x104e55c30> because it is not registered as an observer.

Да, B связан с NSArrayController.

  • Если я удаляю этот ArrayController из файла NIB, все работает нормально (за исключением всего, что должен делать ArrayController)
  • Если я создаю много B и добавляю их в A в другом месте (вне метода уведомления), все работает, находиттакже с ArrayController.

Может кто-нибудь мне помочь, пожалуйста?

(Прошу прощения за мое плохое произношение.)

1 Ответ

2 голосов
/ 13 августа 2011

Вы сказали, что делаете эту работу в отдельном потоке.Если это так, вам нужно убедиться, что вы используете отдельный NSManagedObjectContext.Вы не можете использовать один и тот же NSManagedObjectContext в нескольких потоках, а также нельзя использовать NSManagedObject, связанный с одним MOC в другом MOC.Каждый поток должен взаимодействовать с CoreData независимо.

...