У меня есть класс ViewController
, у которого есть свойство, которое является моделью, которую я хочу наблюдать при изменении свойств модели.В моем объекте модели у меня есть свойство, которое периодически обновляется в фоновом режиме моего приложения.Когда он обновляется, мне нужно выполнить код внутри моего ViewController
.
. Для этого я создаю наблюдателя на моей модели из моего ViewController
viewDidLoad
метода.
[ModelObject addObserver:self
forKeyPath:@"State"
options:NSKeyValueObservingOptionNew
context:nil];
Как видите, в этом нет ничего особенного, и метод наблюдения ведет себя так, как и должен, пока я оставляю вид, отображаемый на моем экране.Если я удаляю вышеуказанное представление из родительского представления, я получаю сообщение об ошибке EXC_BAD_ACCESS
, когда изменяется мое свойство ModelObject
instance Mode
.В частности, мое приложение аварийно завершает работу на строке, обновляющей свойство Mode
, и я получаю бесполезный EXC_BAD_ACCESS
в следующей строке кода в экземпляре ModelObject.
//This is located in a method that periodically toggles the value of "State"
[self setState: 2];
Я бы предположил, что решениек этой проблеме относится вызов [ModelObject removeObserver: self forKeyPath:@"State"]
откуда-то из моего ViewController
, когда он удаляется из родительского массива подпредставления.Тем не менее, я добавил эту строку кода в мой метод viewDidUnload
, но обнаружил, что метод viewDidUnload
не вызывается.Я не уверен, что это правильное место, но куда-то нужно идти.
Что я могу делать неправильно?Я знаю, что проблема связана с KVO, потому что, если я уберу наблюдение, приложение будет работать без проблем.Мой экземпляр модели может переключать это значение столько раз, сколько он хочет, и мое приложение никогда не падает.Что я должен сделать, чтобы убедиться, что мой наблюдатель удаляется правильно, когда вид наблюдения удаляется из массива подпредставлений его родителя?