Dr.*_*eon 2 cocoa objective-c cocoa-bindings
我有一个自定义类(NSView实际上让我们说一个修改过的编辑器的子类,但不是它的子类NSTextView)我以NSArrayController编程方式绑定(我绝对不能通过Interface Builder来实现),如下所示:
[myEditor bind:@"string"
toObject:myController
withKeyPath:@"selection.content"
options:nil];
Run Code Online (Sandbox Code Playgroud)
上面的工作,但是当值改变时,它不会更新到我的NSArrayController- 它就好像它没有"坚持".
我甚至试过,使用options下面,但无济于事:
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],NSContinuouslyUpdatesValueBindingOption,
[NSNumber numberWithBool:YES],NSAllowsEditingMultipleValuesSelectionBindingOption,
[NSNumber numberWithBool:YES],NSConditionallySetsEditableBindingOption,
[NSNumber numberWithBool:YES],NSRaisesForNotApplicableKeysBindingOption,
nil];
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
类必须实现对绑定的支持.Cocoa附带的视图和单元类通常实现一组特定的绑定.自定义子类是否起作用取决于实现者.
如果某个类没有实现对绑定的特定支持,那么-bind:...请求将NSObject落实到实现中.但是,这种实施非常有限.它观察observableController的关键路径,并通过KVC更新接收器的属性,该接收器具有与绑定相同的名称.但它并没有在其他方向上走.也就是说,接收器上属性的更改不会通过密钥路径转发到observableController.
使用您的示例使这不那么抽象.如果类myEditor没有专门实现对"字符串"绑定的支持,那么NSObject实现就行了[myController addObserver:<some private observer object> forKeyPath:@"selection.content" options:<...> context:<...>].
当私有观察者对象收到更改通知时,它会这样做[myEditor setValue:[myController valueForKeyPath:@"selection.content"] forKey:@"string"].
但是,NSObject不会试图观察myEditor"字符串"属性,也不会打电话[myController setValue:<...> forKeyPath:@"selection.content"].
要了解有关如何实现绑定支持的更多信息,请参阅Apple的文档.
| 归档时间: |
|
| 查看次数: |
3486 次 |
| 最近记录: |