两个窗口都有一个NStextVIEw:窗口A中textvIEw的attributionString绑定到使用IB的模型的属性文本;而Window B中textvIEw的attributionString使用 – [NSObject bind:toObject:withKeyPath:options:]方法绑定到模型的text属性.
[textvIEw bind:@"attributedString" toObject:obj withKeyPath:@"text" options:nil];
这是奇怪的事情:Window B中的textvIEw确实绑定到obj.text,但textvIEw中的更改永远不会更新为obj.text.但是,如果我在窗口A的文本视图中进行了更改,则窗口B中的obj.text和textvIEw会相应更新.
所以我在想,– [NSObject bind:toObject:withKeyPath:options:]方法仅用于单向绑定.我在Cocoa文件中找不到明确的解释.有没有人遇到过这个问题?如何在代码中实现双向绑定?
解决方法 Cocoa绑定本质上是双向的,但某些行为(如文本字段的连续/实时更新)需要设置特定选项.在IB中,您需要确保选中“连续更新值”复选框.要以编程方式获得等效行为,您需要在绑定上指定选项.这可能看起来像这样:[textvIEw bind: NSAttributedStringBinding toObject: obj withKeyPath: @"text" options: (@{ NSContinuouslyUpdatesValueBindingOption : @YES })];
值得一提的是,在以编程方式设置绑定时,值得检查IB中的等效绑定并确保将所有相同的设置传递给程序绑定.例如,我在IB中看到,默认情况下,对于NSTextVIEw的归属字符串绑定,都会选中“允许编辑多个值选择”,“有条件地设置可编辑”和“引发不适用键”选项.这意味着我们的程序化绑定应该看起来像:
[textvIEw bind: NSAttributedStringBinding toObject: obj withKeyPath: @"text" options: (@{ NSContinuouslyUpdatesValueBindingOption : @YES,NSAllowsEditingMultipleValuesSelectionBindingOption : @YES,NSConditionallySetsEditableBindingOption : @YES,NSRaisesForNotApplicableKeysBindingOption : @YES })];总结
以上是内存溢出为你收集整理的cocoa – bind:toObject:withKeyPath:options:是单向绑定吗?全部内容,希望文章能够帮你解决cocoa – bind:toObject:withKeyPath:options:是单向绑定吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)