2014-11-04 5 views
1

Я пытаюсь наблюдать переменную свойства (xxx) от ResultDataClass. В моей работе ViewController я написал следующее.KVO не работает (наблюдает за другим классом)

-(void)dealloc {  
    ResultDataClass *resultData = [ResultDataClass getInstance]; 
    [resultData addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionNew context:NULL]; 
} 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    self.solutionText.text = @"test1"; 

    if([keyPath isEqualToString:@"xxx"]) { 
     self.solutionText.text = @"test2"; 
    } 

} 

solutionText в моей рабочей ViewControllerUITextView. После запуска программы ничего не было показано в текстовом виде.

Кто-нибудь знает, как это исправить?

Спасибо и извините за мой английский.

+1

Почему вы настройки вещи на '' self' в dealloc'? – trojanfoe

ответ

1

Вы написали наблюдателя в методе dealloc. Будет проблема, ваш объект будет выпущен при добавлении наблюдателя, поэтому произойдет сбой при изменении значения KVO.

Нет аварии и ничего не работает, я думаю, что причина такова; метод dealloc никогда не вызывается. Это означает, что ваш контроллер просмотра никогда не выпускается (возможно, утечка, сильный цикл сохранения есть).

Вместо того, чтобы добавить, что в вашем viewDidLoad:

- (void)viewDidLoad 
{  
    [super viewDidLoad]; 
    ResultDataClass *resultData = [ResultDataClass getInstance]; 
    [resultData addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionNew context:NULL]; 
} 
+0

Большое вам спасибо. Ранее я писал метод viewDidLoad, но ничего не было показано. – user

+0

@user: Будет ли '[ResultDataClass getInstance];' возвращать экземпляр singleton? –

+0

Да. Я использую ResultDataClass для сбора всех данных из других классов. – user

Смежные вопросы