Objective c 可可装订不';更改对象的-observeValueForKeyPath:中的属性时不起作用:更改:上下文:
因此,我将这个textFieldObjective c 可可装订不';更改对象的-observeValueForKeyPath:中的属性时不起作用:更改:上下文:,objective-c,macos,cocoa,binding,key-value-observing,Objective C,Macos,Cocoa,Binding,Key Value Observing,因此,我将这个textFieldsomeField绑定到InterfaceBuilder(IB)中的属性someText。 在我的代码中的任何地方,当我更改someText时,someField内容会相应地更新,反之亦然 方法中以外的任何位置-observeValueForKeyPath:ofObject:change:context: 实际上,我正在观察someText,这样当文本字段中的值更改时,绑定会修改someText,我可以对其执行一些验证。 发生这种情况时,我可以执行以下操作: -
someField
绑定到InterfaceBuilder(IB)中的属性someText
。
在我的代码中的任何地方,当我更改someText
时,someField
内容会相应地更新,反之亦然
方法中以外的任何位置-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
中。但这不会发生
我显然错过了一些东西,但不知道是什么。任何帮助都将不胜感激!干杯。您不应该在-observeValueForKeyPath:ofObject:change:context:中验证值,而应该执行以下操作:
-(BOOL)validateSomeText:(id *)ioValue error:(NSError * __autoreleasing *)outError
{
...
if (enteredValueIsNotValid)
*ioValue = validValue;
return YES;
}
这应该适用于绑定(并且可以选择立即验证字段内容,即在字段“尝试辞去响应者的职务”之前),但是-setValue:forKey:不调用它,并且根据文档,您的设置者也不应该调用它
有关详细信息,请参见Hey Baldoph,想知道你为什么删除了你的问题。你找到答案了吗?@JAL刚刚看到你的问题,对不起!我完全忘记了为什么我需要它,为什么我把它拿走了。。。恐怕帮不了什么忙:/