Бен прав - но я нашел другой, потенциально хрупкий, способ обойти это. Я только что обнаружил это, потому что я всегда получал "... был освобожден, в то время как наблюдатели ключевых значений все еще были зарегистрированы в нем"
Я не знаю, почему - но когда у меня был addObserver в моем методе init и removeObserver в моем методе dealloc - я все еще получал сообщение о том, что KVO все еще наблюдается. Я прошел и убедился, что мой removeObserver вызывается правильно.
Я переместил свой addobserver в метод viewDidLoad, и это, похоже, сработало.
Я оставил removeObserver в viewDidUnload и в dealloc; но мне это не нравится, потому что оно не сбалансировано. Но при нормальных обстоятельствах мой viewDidUnload не вызывается - это просто защита на случай, если я получу уведомление о нехватке памяти.
Но я вижу потенциальную возможность возникновения ситуации с нехваткой памяти, вызывается viewDidUnload. Если после этого я нажму Deloc (прежде чем снова нажму ViewDidLoad), я дважды вызову removeObserver!
Итак, я думаю, что я просто оставлю это в моем viewDidLoad и в моем контенте.
Я до сих пор не знаю, почему это не работает, если я делаю addobserver в моем методе init.