ios - KVO 不工作(观察另一个类的属性)

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

我正在尝试观察 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/

相关文章:

ios - 从后台线程调用 UIKit 时发出警告

ios - Swift:无法打开枚举关联值

ios - 如何检查是否在 iOS 13 中打开了首选交叉淡入淡出过渡?

ios - 钛合金上的选项卡应用横向模式

ios - 如何合并两个 NSDictionaries?

ios - 如何在应用程序在后台运行时监听锁定/解锁电话事件?

ios - MFSideMenu 如何在另一个 ViewController 中加载

iphone - 如何获取两个单词之间的 NSString?

iphone - 如何绘制 UITableViewCell 的 contentView?

iphone - 代码中核心数据简单关系