0

私は頭がおかしくなり、ウェブ上のあらゆる場所を見ましたが、KVO を観察するための同じコードを常に見つけました。それでも、observeValueForKeyPath: は呼び出されません。これは、UILabel taximeterValue を観察するために使用する単純なコードです。

-(id) initWithCoder:(NSCoder *)aDecoder{
    self=[super initWithCoder:aDecoder];
    if (self){
                [taximeterValue addObserver:self forKeyPath:@"text" options:(NSKeyValueObservingOptionNew |
                                                               NSKeyValueObservingOptionOld) context:NULL];
    }
    return self;
}


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context {
if ([keyPath isEqual:@"text"]) {
    if (myBookingAlert) myBookingAlert.taximeterValue=self.taximeterValue;
    NSLog(@"the text changed");
    // put your logic here
}
// be sure to call the super implementation
// if the superclass implements it
[super observeValueForKeyPath:keyPath
                     ofObject:object
                       change:change
                      context:context];

}

4

1 に答える 1

1

考えられるいくつかの説明:

  1. taximeterValueはゼロです。
  2. 何も変わっていませんtaximeterValue.text
  3. taximeterValue.textKVO に準拠していない方法で何かが変更されています。へのすべての変更はtaximeterValue.text、 を呼び出すか、適切なandメッセージ[taximeterValue setText:]で囲む必要があります。willChangeValueForKey:didChangeValueForKey:
于 2013-05-29T20:01:39.040 に答える