2014-04-12 28 views
2

因此,我將此文本字段someField綁定到InterfaceBuilder(IB)中的屬性someText。 我的代碼中的任何地方,當我更改someText,someField相應的內容更新,反之亦然。在更改-observeValueForKeyPath:ofObject屬性時,可可綁定不起作用:ofObject:change:context:

任何地方,但在方法-observeValueForKeyPath:ofObject:change:context:

事實上我觀察someText這樣,當在文本字段中的值發生改變時,結合修改someText,我可以對它進行一些驗證。 發生這種情況時,我可以做到以下幾點:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    [...] 
    //keyPath is @"someText" 
    if (enteredValueIsNotValid) { 
     [object setValue:validValue forKey:keyPath]; 
    } 
    [...] 
} 

調用[object setValue:validValue forKey:keyPath]後,someText了價值validValue。就像預期的一樣。但因爲有一個招標,我也希望看到validValue顯示在我的文本字段someField。但它不會發生!

我明顯失去了一些東西,但無法弄清楚什麼。任何幫助將不勝感激!乾杯。

+0

嘿Baldoph,好奇,爲什麼你刪除了你的問題[這裏](http://stackoverflow.com/q/36502630/2415822)。你找到答案了嗎? – JAL

+0

@JAL現在只是看到你的問題,我很抱歉!我完全忘記了爲什麼我需要這個,爲什麼我把它刪除......這裏沒有太多的幫助,我很害怕:/ – Baldoph

回答

2

而是驗證在-observeValueForKeyPath值:ofObject變化:背景:,你應該這樣做:

-(BOOL)validateSomeText:(id *)ioValue error:(NSError * __autoreleasing *)outError 
{ 
    ... 
    if (enteredValueIsNotValid) 
     *ioValue = validValue; 
    return YES; 
} 

這應該綁定的工作(而且也立即驗證字段內容,即選項在字段「嘗試辭職爲響應者」之前),但-setValue:forKey:不會調用它,並根據您的設置者不應該的文檔。

有關詳細信息,請參閱https://developer.apple.com/library/mac/documentation/cocoa/conceptual/KeyValueCoding/Articles/Validation.html