2014-04-12 67 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