我正在尝试观察 ResultDataClass
的属性变量 (xxx
)。在我的工作 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
是我工作的 ViewController
中的一个 UITextView
。
运行程序后, TextView 中没有显示任何内容。
有人知道如何解决这个问题吗?
谢谢你,对不起我的英语。
最佳答案
您在 dealloc
方法中编写了观察者。会有一个问题,当你添加一个观察者时你的对象正在被释放,所以当 KVO 值改变时会发生崩溃。
没有崩溃,没有任何工作,我认为原因是; dealloc
方法永远不会被调用。这意味着您的 View Controller 永远不会被释放(可能是泄漏,存在强大的保留周期)。
而不是在您的 viewDidLoad 中添加:
- (void)viewDidLoad
{
[super viewDidLoad];
ResultDataClass *resultData = [ResultDataClass getInstance];
[resultData addObserver:self forKeyPath:@"xxx" options:NSKeyValueObservingOptionNew context:NULL];
}
关于ios - KVO 不工作(观察另一个类的属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26729278/