Ver*_*ous 19 cocoa cocoa-bindings
我正在探索绑定,并有一个NSPopUpButton -
它提出我的一些选项下的价值选择绑定- ,,Content s,然后,和.有人可以解释一下这些之间的区别吗?Content ObjectsContent ValueSelected ObjectSelected Value,Selected Tag
小智 36
这些在NSPopUpButton的Cocoa Bindings Reference中有解释,尽管该引用并不十分清楚.
Content是一个数组控制器,为弹出按钮提供元素.阵列控制器应绑定到一个数组.为了确定如何在弹出按钮中显示数组中的每个元素,将其-description发送到数组中的每个对象.
您可以通过两种方式自定义它:
如果希望Selected Object绑定提供与绑定的数组控制器管理的数组元素不同的对象,Content则可以绑定Content Objects到另一个数组控制器.它也可以是相同的阵列控制器,但具有不同的密钥路径;
如果希望弹出按钮选项与Content绑定的Content Values数组控制器管理的数组中每个元素的描述不同,则可以绑定到另一个管理其元素包含弹出选项的数组的数组控制器.它也可以是相同的阵列控制器,但具有不同的密钥路径.
一个简单的例子:假设您有以下类:
@interface Customer : NSObject
@property (copy) NSString *name;
@property (copy) NSString *phoneNumber;
@end
Run Code Online (Sandbox Code Playgroud)
并且您没有覆盖该-description方法.在这种情况下,-description没用,name属性将是弹出选项的一个很好的选择.你绑定:
Content到一个管理Customer实例数组的控制器密钥的数组控制器arrangedObjects;Content Values到相同的阵列控制器,控制器键arrangedObjects,模型键路径name.然后,您可以绑定Selected Object到其他内容,例如应用程序委托或窗口控制器中的属性.然后,Cocoa绑定会将所选Customer实例分配给该属性.
现在假设您对Customer所选的整个对象不感兴趣,但只对其电话号码感兴趣.在这种情况下,您可以绑定Content Objects到相同的阵列控制器,控制器键arrangedObjects,模型键路径phoneNumber.选择弹出选项时,将设置Cocoa绑定phoneNumber而不是整个Customer实例.总结:如果不绑定Content Objects,则Selected Object表示数组中的原始对象.如果你绑定Content Objects,那么Selected Object可以是不同的东西.
Selected Value如果您对原始对象(或内容对象)不感兴趣,则会绑定,但弹出选项中显示的实际字符串将根据Content Values绑定进行绑定.
为弹出按钮提供数据的快速配方:
Content如果您有代表弹出选项的对象(不仅是字符串),请绑定;Content Values如果Content通过发送-description到数组元素无法获得向用户显示的选项,则绑定;Content Objects如果要Selected Object返回与数组元素不同的内容,请绑定Content.在弹出按钮中获取当前选择的快速配方:
Selected Object如果你想知道代表当前弹出选择的完整对象(来自Content或Content Objects);Selected Value如果您只想要弹出窗口中当前选中的字符串,请绑定.最后,Selected Tag如果弹出选项实际上来自其项目具有标记集的菜单,则可以使用.