Как убрать наблюдателя КВО? - PullRequest
2 голосов
/ 09 декабря 2011

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

При их создании я выполняю довольновот что:

  • Выделить / инициализировать подпредставление
  • добавить контроллер представления в качестве наблюдателя свойства frame подпредставления.
  • добавить его в сохраненный массив
  • добавьте его в представление
  • отпустите его

Подвид не имеет ссылки на контроллер представления.

Когда пользовательудаляет подпредставление, оно освобождается, и я получаю сообщение об ошибке в консоли, говорящее мне, что наблюдатель не указал путь ключа frame представления.

Как я могу удалить наблюдателя, когда наблюдаемое подпредставлениене сохраняет ссылку на наблюдателя?

Разве нет возможности сделать что-то вроде removeAllObservers?

Я бы предпочел не создавать ссылку на наблюдателя в подпредставлении,как это несколько побеждаетточка КВО (я мог бы также использовать настройку делегата).

1 Ответ

0 голосов
/ 09 декабря 2011

Я не уверен, почему вы наблюдаете фрейм, но если вы просто хотите узнать, когда он будет удален, вы можете вместо этого использовать NSNotificationCenter. Оттуда ваше подпредставление может отправить в центр уведомлений, что оно было изменено / удалено. Ваш родительский вид увидит это уведомление и может что-то с ним сделать в зависимости от того, что находится в уведомлении. Это несколько слабо связанный kvo.

Вот отличный пример по настройке. Отправлять и получать сообщения через NSNotificationCenter в Objective-C?

Таким образом, супервизор должен просто удалить себя от просмотра этого термина в центре уведомлений, когда его выпускают / выгружают.

В любом случае, это другой способ, кроме КВО и делегатов.

...