我在使 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属性更改时,它将负责发送适当的通知。

10-05 20:34