Bar*_*Naz 2 cocoa binding bind manual
我有一个显示锁定的ImageView,通知是否已锁定打开的文件.锁定和解锁的情况我有2张图片.我希望将显示的图像与表示打开文件的对象的布尔值同步.
为此,我希望我的ViewController根据对象的锁定状态更改ImageView中的图像.因此object和ViewController都有一个属性"isLocked".
我该如何同步它们?在IB中很容易,但我不知道如何以编程方式进行.我尝试使用我的ViewController的初始化方法:
[ViewController bind:@"value" toObject:[ArrayController selection] withKeyPath:@"isLocked" options:nil];
但它不起作用.在文档中,据说我必须在使用它之前公开我的绑定.
我尝试将以下代码放在我的对象的初始化方法中:
[self exposeBinding:@"isLocked"];
但Xcode不承认这种方法.
有人有这种绑定建立的经验吗?
正如@nick所说,你想要Key-Value-Observing.
[arrayController addObserver:self 
                forKeyPath:@"selection.isLocked"
                options:NSKeyValueObservingOptionNew
                context:@"this_context"]
然后当isLocked更改-observeValueForKeyPath:ofObject时:更改:context:将调用已添加到viewController的方法(只要您只以符合KVC的方式操作isLocked).
options参数允许您可以选择性地调整将触发通知的条件以及与通知一起发送的数据.context参数用于帮助您区分注册接收的通知和超级注册接收的通知.这是可选的.
绑定似乎可能有助于保持两个值同步.然而,这并不是他们所做的.
是的,许多事情似乎给人的印象是这就是他们所做的,而且没有多少人说这不是他们所做的,也有很多人认为这就是他们所做的 - 但不,你不能使用它们.
只有少数几个类支持绑定(它们在这里列出)然后,这是重要的一点,这些类只支持绑定它们的命名绑定,而这些绑定不是实例变量.例如,NSTextField具有' fontFamilyName '绑定,但NSTextField 没有 'fontFamilyName'属性或实例变量,甚至是派生变量.NSTextField确实具有'isBordered'属性但不具有绑定 - 因此您无法绑定'isBordered'.
它并不意味着"绑定"任意类的任意属性.