KVO不工作(观察另一个班级的财产)

时间:2014-11-04 06:51:52

标签: ios objective-c iphone key-value-observing

我正在尝试观察xxx的属性变量(ResultDataClass)。在我的工作ViewController中,我写了以下内容。

-(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在我的工作UITextView中是ViewController。 运行程序后,textview中没有显示任何内容。

任何人都知道如何解决这个问题?

谢谢你,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

你用dealloc方法写了观察者。会出现问题,在添加观察者时会释放您的对象,因此在更改KVO值时会出现崩溃。

没有崩溃,没有任何工作,我认为原因是;永远不会调用dealloc方法。这意味着您的视图控制器永远不会被释放(可能是泄漏,存在强大的保留周期)。

而不是在viewDidLoad中添加它:

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