我有问题让 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类型的另一个属性非常正常。
任何人都可以帮助我弄清楚我做错了什么,或者我该怎么做才能使这项工作。
祝你好运 托莫
答案 0 :(得分:7)
也许我在你的问题中遗漏了一些内容,但你可以像其他类型一样轻松地观察int
类型的属性而不做任何特殊的事情。
尝试删除+automaticallyNotifiesObserversForKey:
覆盖和-setSampleValue:
setter,然后合成sampleValue
的访问者:
@synthesize sampleValue;
int
是与键@"sampleValue"
对应的值的类型,但它不是被观察到的东西。被观察的对象是dc
,当sampleValue
属性发生变化时,它会负责发送正确的通知。