我有問題使IOS(objective-c)KVO適用於類型爲int的鍵。關於簡單類型(非NSObject)的KVO(IOS 5)
我的課堂聲明屬性sampleValue int類型。隨着誠信不會自動實現國際志願者組織的功能,我overrided方法automaticallyNotifiesObserversforKey就象這樣:
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey {
BOOL automatic = NO;
if ([theKey isEqualToString:@"sampleValue"]) {
automatic = NO;
} else {
automatic=[super automaticallyNotifiesObserversForKey:theKey];
}
return automatic;
}
的方法被稱爲就像我希望是如此。我還實現了一個setter方法爲sampleValue屬性是這樣的:
- (void) setSampleValue:(int)newSampleValue
{
[self willChangeValueForKey:@"sampleValue"];
sampleValue = newSampleValue;
[self didChangeValueForKey:@"sampleValue"];
}
設置在觀察者類觀察者像這樣做(dc爲觀察對象的實例):
[dc addObserver:self forKeyPath:@"sampleValue" options:NSKeyValueObservingOptionNew context:NULL];
但是,更新sampleValue時,不會向我的觀察者對象發送通知。更新NSDate類型的另一個屬性絕對沒問題。
任何人都可以幫我弄清楚我做錯了什麼,或者我應該怎麼做才能做到這一點。
問候 託莫
謝謝Caleb。我認爲我猜測int不支持KVO,因爲我無法使其發揮作用。我刪除了你提到的那些沒有幫助的方法。接下來我加了自我。在要觀察的財產面前,所以它現在有self.sampleValue = ...這使它工作。當sampleValue更新時,我現在在觀察者對象中收到消息。 – Torben 2012-01-17 12:03:12
自己弄明白了。不好意思,打擾了。無論如何,感謝您的貢獻。 – Torben 2012-01-17 13:31:35
正確 - 你需要設置'sampleValue'屬性,而不是相應的實例變量。這是將導致消息發送的屬性設置器。這意味着你需要寫'self.sampleValue = ...'或'[self setSampleValue:...]'。 – Caleb 2012-01-17 14:01:06