gpt4 book ai didi

objective-c - Cocoa Binding, View 或 Controller 是接收者有关系吗?

转载 作者:行者123 更新时间:2023-12-03 17:49:47 25 4
gpt4 key购买 nike

使用Apple's Examples ,两者之间有区别吗:

[操纵杆绑定(bind):@"angle"toObject:GraphicController withKeyPath:@"selection.shadowAngle"options:options];

[GraphicController 绑定(bind):@"selection.shadowAngle"toObject:joystick withKeyPath:@"angle"options:options];

因此,根据文档,绑定(bind)将其设置为使用 KVO,接收者观察对象,并使用 KVC 设置对象的属性。以下是他们提供的相关数据。

但在我看来,我不明白为什么这不能翻转?为什么 Controller 不能观察到带有 KVO 的 View 上的值的变化,以及为什么它不能在带有 KVC 的 View 上设置值?

最佳答案

是的,这很重要。

首先,并非所有绑定(bind)名称都是属性名称。例如,NSTextField有一个"value"绑定(bind)(您可以使用 NSValueBinding 常量),但它没有 value属性。

其次,并非所有属性都符合 KVO 标准。一般来说,假设属性符合 KVO,除非有记录。 View 的许多属性不符合 KVO。具有相同名称的绑定(bind)仍然可以工作,因为该类实现了该绑定(bind)并知道其自身内部状态何时发生变化,而无需依赖 KVO。

第三,通常情况下需要有-bind:toObject:withKeyPath:options:的具体实现。在接收器上实现绑定(bind)。 NSObject提供 NSKeyValueBindingCreation 的默认实现非正式协议(protocol),但其相当有限。例如,它是只读的。它观察 observableController用于更改键路径上的属性,并将新值转发到由绑定(bind)名称命名的接收器上的属性,但不会执行相反的操作。对接收者属性的更改不会转发到observableController在关键路径上。

这通常不是您想要的绑定(bind)效果,尤其是当您颠倒角色时。因此,您需要一个自定义实现。您链接到的文档显示了 -bind:... 的此类自定义实现如何可以写。

最后, Controller 在绑定(bind)到时执行一些服务,而当它们是正在设置绑定(bind)的事物时,它们无法执行。这主要围绕NSEditorNSEditorRegistration NSController 上的协议(protocol)及其实现(由其子类继承)。

例如,当文本字段绑定(bind)到 Controller 时,它会在开始编辑时将自身注册到该 Controller 。稍后,其他一些代码需要确保编辑完成,并且所有绑定(bind)都已更新以反射(reflect)该编辑。它调用 -commitEditing... 之一 Controller 上的方法。这将依次调用 -commitEditing...在文本字段上。

如果角色互换,这将不起作用。

关于objective-c - Cocoa Binding, View 或 Controller 是接收者有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580928/

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