cocoa – bind:toObject:withKeyPath:options:是单向绑定吗?

cocoa – bind:toObject:withKeyPath:options:是单向绑定吗?,第1张

概述我有两个窗口:窗口A从NIB加载;和Window B以编程方式创建. 两个窗口都有一个NStextView:窗口A中textview的attributionString绑定到使用IB的模型的属性文本;而Window B中textview的attributionString使用 – [NSObject bind:toObject:withKeyPath:options:]方法绑定到模型的text属性 我有两个窗口:窗口A从NIB加载;和Window B以编程方式创建.

两个窗口都有一个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:是单向绑定吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存