наблюдатели значения ключа все еще были зарегистрированы с ним, когда контроллер освобожден

Я добавил наблюдателя в код, а затем удалил его в dealloc и viewWillDisappear, но все равно получаю сообщение об ошибке

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Экземпляр 0x167e5980 класса MyController2 был освобожден, в то время как наблюдатели значения ключа все еще были зарегистрированы в нем.

Current observation info: <NSKeyValueObservationInfo 0x16719f90> (
<NSKeyValueObservance 0x16719fb0: Observer: 0x167e5980, Key path: dataContainer.report, Options: <New: YES, Old: YES, Prior: NO> Context: 0x0, Property: 0x1677df30>
)'

Я создал контроллер,MyController и получить новый контроллерMyController2 от него. Теперь я добавил КВО вMyController2.

- (void)viewDidLoad {
    [super viewDidLoad];
    [self addObserver:self forKeyPath:@"dataContainer.report" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}

Затем в наблюдаемом значении ForKeyPath: -

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {

    id oldC = [change objectForKey:NSKeyValueChangeOldKey];
    id newC = [change objectForKey:NSKeyValueChangeNewKey];

    if([keyPath isEqualToString:@"dataContainer.report"]) {
        if (oldC != newC) {
            //Remove Observer

            [self removeObserver:self forKeyPath:@"dataContainer.report" context:nil];
            [self updateDataContainer];
            [self reportView];
        }
    }
}

Затем я попытался удалить наблюдателя в viewWillDisappear и dealloc оба: -

- (void)dealloc {
    @try{
        [self removeObserver:self forKeyPath:@"dataContainer.report" context:nil];
    }@catch(id anException){
    }
}

-(void) viewWillDisappear:(BOOL)animated{
    @try{
        [self removeObserver:self forKeyPath:@"dataContainer.report" context:nil];
    }@catch(id anException){
    }
    [super viewWillDisappear:animated];
}

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

Ответы на вопрос(1)

Ваш ответ на вопрос