KVO不与UISwitch合作

时间:2011-08-25 16:30:17

标签: ios key-value-observing uiswitch

对于我的生活,我无法让KVO与UISwitch合作。我有一个自定义UITableViewCell,通过Interface Builder添加了UISwitch。我为UISwitch创建了一个IBOutlet,并将其链接到theSwitch变量。

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
           [theSwitch addObserver:self forKeyPath:@"on" options:NSKeyValueObservingOptionNew context:NULL];
    }
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"toggled switch");
}

observeValueForKeyPath:ofObject:change:context永远不会被调用!

2 个答案:

答案 0 :(得分:9)

我不确定,但UISwitch可能不符合KVO标准。

无论如何,因为你可以只使用控制事件:

[theSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
// ...
- (void)switchChanged:(UISwitch *)sender {
    if (sender.on) {
        // ...
    }
}

答案 1 :(得分:0)

添加观察者时,可能尚未初始化切换。尝试在awakeFromNib中添加观察者。