我在使 IOS(objective-c)KVO 对int类型的键起作用时遇到问题。
我的类声明了一个类型为int的属性 sampleValue 。由于int不会自动实现KVO功能,因此我自动重写了方法NotNotificationObserversforKey ,如下所示:
+ (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更新时,没有通知发送到我的观察者对象。更新NSDate类型的另一个属性绝对可以。
谁能帮助我找出我做错了什么或应该做些什么才能使这项工作。
最好的祝福
友
最佳答案
也许我在您的问题中遗漏了一些东西,但是您可以像其他类型一样轻松观察int
类型的属性,而无需执行任何特殊操作。
尝试删除+automaticallyNotifiesObserversForKey:
覆盖项和-setSampleValue:
设置器,然后合成sampleValue
的访问器:
@synthesize sampleValue;
int
是与键@"sampleValue"
对应的值的类型,但不是正在观察的东西。被观察的对象是dc
,当sampleValue
属性更改时,它将负责发送适当的通知。