关于简单类型的KVO(IOS 5)(非NSObject)

时间:2012-01-17 01:28:05

标签: ios key-value-observing

我有问题让 IOS(objective-c)KVO 为int类型的键工作。

我的类声明了int类型的属性 sampleValue 。由于int没有自动实现KVO功能,因此我已将自动更改为ObserObserversforKey 的方法改为:

+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey {

    BOOL automatic = NO;
    if ([theKey isEqualToString:@"sampleValue"]) {
        automatic = NO;
    } else {
        automatic=[super automaticallyNotifiesObserversForKey:theKey];
    }
    return automatic;
}

正如我所期望的那样调用该方法。我还为sampleValue属性实现了一个setter方法,如下所示:

- (void) setSampleValue:(int)newSampleValue
{
    [self willChangeValueForKey:@"sampleValue"];
    sampleValue = newSampleValue;
    [self didChangeValueForKey:@"sampleValue"];
}

在观察者类中设置观察者就像这样(dc是观察对象的实例):

[dc addObserver:self forKeyPath:@"sampleValue" options:NSKeyValueObservingOptionNew context:NULL];

但是,更新sampleValue时,不会向我的observer对象发送通知。更新NSDate类型的另一个属性非常正常。

任何人都可以帮助我弄清楚我做错了什么,或者我该怎么做才能使这项工作。

祝你好运 托莫

1 个答案:

答案 0 :(得分:7)

也许我在你的问题中遗漏了一些内容,但你可以像其他类型一样轻松地观察int类型的属性而不做任何特殊的事情。

尝试删除+automaticallyNotifiesObserversForKey:覆盖和-setSampleValue: setter,然后合成sampleValue的访问者:

@synthesize sampleValue;

int是与键@"sampleValue"对应的值的类型,但它不是被观察到的东西。被观察的对象是dc,当sampleValue属性发生变化时,它会负责发送正确的通知。