2013-06-26 48 views
0

我已經得到了我的文本框的觀察員,看起來,看看是否「啓用@屬性已更改。獲取更改的屬性與觀察者的價值

(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *) context; 
{ 


UITextField *txtField = (UITextField *)object; 




BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue]; 
BOOL old = [[change objectForKey:NSKeyValueChangeOldKey] boolValue]; 


if ((new != old) && (new = YES)) 
{ 

[self fadeDisable:txtField]; 
} 

else if ((new != old) && (new = NO)) 
{ 
    [self fadeEnable:txtField]; 

} 

我想如果我用INT新和int老,1或0定義屬性是否啓用將返回,但是當我使用NSLog來查看你正在帶回來,這是一個很長的字符串。

我看通過文檔和它似乎objectForKey實際上返回一個id不是一個整數,但我不知道該怎麼辦。

編輯:我已經添加了我的比較代碼,試圖確定它是否從禁用啓用(或反之亦然)。還推薦使用boolValue修正。

它沒有給出預期的結果,也沒有調用正確的方法。這是對的嗎? 謝謝

+0

*** int new *** ???你認爲它會編譯? –

+1

它們是'id',因爲字典只能包含對象。如果原始屬性是一個'int',那麼你很可能會得到'NSNumber'。 – 2013-06-26 11:45:37

+0

@ LithuT.V爲什麼不呢? – 2013-06-26 11:45:54

回答

1

NSDictionary包含對象(如NSNumber),而不是原始類型(如int)。如您所知,

[change objectForKey:NSKeyValueChangeNewKey] 

返回id。如果你想將其轉換爲int,使用

int new = [[change objectForKey:NSKeyValueChangeNewKey] intValue] 

的,或財產是BOOL,甚至更好:

BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue] 

這行代碼

int new = [change objectForKey:NSKeyValueChangeNewKey] 

導致存儲值指向NSNumber對象的指針變爲new整數,這是你提到的「長串數字」。奇怪的是,它甚至沒有警告就編譯。

+0

謝謝你。我遵照你的指示行事,是有道理的。我在我原來的questiopn中添加了代碼,用於比較我正在做但似乎沒有工作。你能幫忙嗎? – user1923975