2012-01-17 55 views
3

我有問題使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類型的另一個屬性絕對沒問題。

任何人都可以幫我弄清楚我做錯了什麼,或者我應該怎麼做才能做到這一點。

問候 託莫

回答

7

也許我失去了你的問題的東西,但你可以作爲其他類型很容易觀察int類型的屬性沒有做什麼特別的事情。

嘗試刪除您+automaticallyNotifiesObserversForKey:倍率和你-setSampleValue:二傳手,只是合成的訪問者爲sampleValue

@synthesize sampleValue; 

int是對應於鍵入@"sampleValue"值的類型,但它沒有被觀察到的東西。正在觀察的對象是dc,當sampleValue屬性發生更改時,它將負責發送正確的通知。

+1

謝謝Caleb。我認爲我猜測int不支持KVO,因爲我無法使其發揮作用。我刪除了你提到的那些沒有幫助的方法。接下來我加了自我。在要觀察的財產面前,所以它現在有self.sampleValue = ...這使它工作。當sampleValue更新時,我現在在觀察者對象中收到消息。 – Torben 2012-01-17 12:03:12

+0

自己弄明白了。不好意思,打擾了。無論如何,感謝您的貢獻。 – Torben 2012-01-17 13:31:35

+1

正確 - 你需要設置'sampleValue'屬性,而不是相應的實例變量。這是將導致消息發送的屬性設置器。這意味着你需要寫'self.sampleValue = ...'或'[self setSampleValue:...]'。 – Caleb 2012-01-17 14:01:06