КВО: Могу ли я удалить всех наблюдателей от конкретного объекта - PullRequest
7 голосов
/ 20 октября 2011

Я использую наблюдение значения ключа. У меня есть object_1 (NSManagedObject) и несколько других объектов-наблюдателей. Когда я удаляю object_1 из контекста управляемого объекта, моя программа падает.

CoreData: ошибка: серьезная ошибка приложения. Исключение было обнаружено во время обработки изменений Core Data. Обычно это ошибка в наблюдателе NSManagedObjectContextObjectsDidChangeNotification.

Могу ли я поместить что-то в метод dealloc (или куда-то еще), чтобы удалить всех наблюдателей объекта _1? Или единственное подходящее решение - отправить уведомление прямо, когда я собираюсь удалить object_1 из контекста управляемого объекта и прослушать это уведомление другими объектами (чтобы удалить себя из наблюдателей object_1)?

1 Ответ

7 голосов
/ 20 октября 2011

Вы должны убедиться, что ваши наблюдатели удалены, прежде чем ваш объект будет освобожден.Это обратная сторона Key Value Observer.

Как вы предлагаете, один из способов сделать это - удаление, вызванное из вашего метода dealloc.Очевидно, вы не можете знать, у кого есть наблюдатели на вашем объекте, но вам все равно нужно будет уведомить их.

Я бы описал, что вам нужно сделать, но, возможно, просто посмотрите bj-homer 's ответ на вопрос Когда мне следует удалить наблюдателей?Ошибка об освобождении объектов перед удалением наблюдателей .

Если это то, что вам нужно, просто проголосуйте там.Если нет, проголосуйте здесь.Надеюсь, это поможет, в любом случае.

...