gpt4 book ai didi

cocoa - 绑定(bind):toObject:withKeyPath:options: is one-way binding?

转载 作者:行者123 更新时间:2023-12-03 16:06:34 24 4
gpt4 key购买 nike

我有两个窗口:窗口A是从NIB加载的;窗口 B 是通过编程创建的。

两个窗口都有一个 NStextView:窗口 A 中 textview 的 attributeString 绑定(bind)到使用 IB 的模型的属性 text;而窗口 B 中 textview 的 attributeString 使用 -[NSObject bind:toObject:withKeyPath:options:] 方法绑定(bind)到模型的 text 属性。

[textview bind:@"attributedString"
toObject:obj
withKeyPath:@"text"
options:nil];

这里有一个奇怪的事情:窗口 B 中的 textview 确实绑定(bind)到了 obj.text,但是 textview 中的更改永远不会更新到 obj.text 。但是,如果我在窗口 A 的 TextView 中进行更改,则窗口 B 中的 obj.text 和 TextView 也会相应更新。

所以我想, -[NSObject bind:toObject:withKeyPath:options:] 方法仅用于单向绑定(bind)。我在 Cocoa 文档中找不到明确的解释。有人有解决这个问题的经验吗?如何在代码中实现双向绑定(bind)?

最佳答案

Cocoa 绑定(bind)本质上是双向的,但某些行为(例如文本字段的连续/实时更新)需要设置特定选项。在 IB 中,您需要确保选中“连续更新值”复选框。要以编程方式获得等效行为,您需要在绑定(bind)上指定选项。这可能看起来像这样:

[textview bind: NSAttributedStringBinding 
toObject: obj
withKeyPath: @"text"
options: (@{
NSContinuouslyUpdatesValueBindingOption : @YES })];

值得一提的是,当以编程方式设置绑定(bind)时,值得检查 IB 中的等效绑定(bind)并确保将所有相同的设置传递给编程绑定(bind)。例如,我在 IB 中看到,对于 NSTextView 的属性字符串绑定(bind),默认情况下都会选中“允许编辑多个值选择”、“有条件设置可编辑”和“针对不适用的键引发”选项。这意味着我们的编程绑定(bind)可能实际上看起来像:

[textview bind: NSAttributedStringBinding 
toObject: obj
withKeyPath: @"text"
options: (@{
NSContinuouslyUpdatesValueBindingOption : @YES,
NSAllowsEditingMultipleValuesSelectionBindingOption : @YES,
NSConditionallySetsEditableBindingOption : @YES,
NSRaisesForNotApplicableKeysBindingOption : @YES })];

关于cocoa - 绑定(bind):toObject:withKeyPath:options: is one-way binding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com