我有一个 ImageView 显示一个锁,通知打开的文件是否被锁定。我有 2 张锁定和解锁案例的图像。我想将显示的图像与代表打开文件的对象的布尔值同步。
为此,我希望 ViewController 根据对象的锁定状态更改 ImageView 中的图像。所以对象和ViewController都有一个属性“isLocked”。
我怎样才能同步它们?在IB中这很容易,但我不知道如何以编程方式做到这一点。我尝试在 ViewController 的初始化方法中使用:
[ViewController bind:@"value" toObject:[ArrayController selection] withKeyPath:@"isLocked" options:nil];
但这不起作用。在文档中据说我必须在使用它之前公开我的绑定。
我尝试将以下代码放入对象的初始化方法中:
[self exposeBinding:@"isLocked"];
但Xcode不识别这个方法。
有人有建立这种绑定的经验吗?
正如@nick 所说,您需要键值观察。
[arrayController addObserver:self
forKeyPath:@"selection.isLocked"
options:NSKeyValueObservingOptionNew
context:@"this_context"]
然后,当 isLocked 更改时,您添加到 viewController 的 -observeValueForKeyPath:ofObject:change:context: 方法将被调用(只要您仅以符合 KVC 的方式操作 isLocked)。
options 参数允许您选择性地精确调整触发通知的条件以及随通知一起发送的数据。 context 参数可以帮助您区分您注册接收的通知和您的超类注册接收的通知。它是可选的。
绑定似乎对于保持两个值同步很有用。然而,这根本不是他们做的.
是的,很多事情似乎给人的印象是这就是他们所做的,并且没有太多说这不是他们所做的,而且很多人相信这就是他们所做的 - 但不,你不能为此使用它们。
只有少数类支持绑定(它们列在这里) http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CocoaBindingsRef/CocoaBindingsRef.html#//apple_ref/doc/uid/10000189i进而,这是重要的一点,这些类仅支持绑定其命名的bindings,并且这些绑定不是实例变量。例如NS文本字段 has a '字体家族名称' 尚未绑定 NSTextField不具有“fontFamilyName”属性或实例变量,甚至是派生变量。 NSTextField 确实有一个“isBordered”属性,但没有绑定 - 所以你不能绑定“isBordered”。
“绑定”任意类的任意属性并不意味着任何事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)