gpt4 book ai didi

objective-c - Cocoa 以编程方式绑定(bind)+不更新值?

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

我有一个自定义类(NSView 的子类 - 实际上可以说是一个修改过的编辑器,但不是 NSTextView 的子类),我将其绑定(bind)到 NSArrayController 以编程方式(我绝对不能通过 Interface Builder 做到这一点),如下所示:

[myEditor bind:@"string" 
toObject:myController
withKeyPath:@"selection.content"
options:nil];

上面的方法有效,但是当值更改时,它不会更新到我的 NSArrayController - 就像它没有“粘住”一样。

我什至尝试过使用下面的选项,但无济于事:

NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],NSContinuouslyUpdatesValueBindingOption,
[NSNumber numberWithBool:YES],NSAllowsEditingMultipleValuesSelectionBindingOption,
[NSNumber numberWithBool:YES],NSConditionallySetsEditableBindingOption,
[NSNumber numberWithBool:YES],NSRaisesForNotApplicableKeysBindingOption,
nil];

有什么想法吗?

最佳答案

类必须实现对绑定(bind)的支持。 Cocoa 附带的 View 和单元格类通常实现一组特定的绑定(bind)。自定义子类是否这样做取决于实现者。

如果类尚未实现对绑定(bind)的特定支持,则 -bind:...请求落入 NSObject的实现。然而,这种实现是相当有限的。它观察 observableController 的关键路径,并通过 KVC 更新与绑定(bind)同名的接收器的属性。但它不会走向另一个方向。也就是说,对接收器上属性的更改不会通过关键路径转发到 observableController。

使用您的示例使这个不那么抽象。如果类myEditor尚未专门实现对“字符串”绑定(bind)的支持,则 NSObject的实现就可以[myController addObserver:<some private observer object> forKeyPath:@"selection.content" options:<...> context:<...>] .

当私有(private)观察者对象收到更改通知时,它将执行 [myEditor setValue:[myController valueForKeyPath:@"selection.content"] forKey:@"string"] .

但是,NSObject不会尝试观察myEditor的“字符串”属性也不会调用 [myController setValue:<...> forKeyPath:@"selection.content"] .

要了解有关如何实现绑定(bind)支持的更多信息,请参阅 Apple's documentation .

关于objective-c - Cocoa 以编程方式绑定(bind)+不更新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153867/

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