当我使用Interface Builder>检查员>绑定为我的一个视图项(即文本字段)设置绑定,然后我必须指定一个该视图项将绑定到的对象。
所以我现在想知道,我在“Bind to:”中指定了这个对象的作用到底是什么? 我假设Interface Builder自动创建一些执行所有同步操作的方法。是吗?
当我“绑定到:文件所有者”时,它意味着什么?这是我的主文件里面的文件吗?
答案 0 :(得分:2)
...我在“Bind to:”中指定了这个对象的作用究竟是什么?
将视图绑定到控制器。控制器拥有该模型;绑定到的控制器键是提供该模型某些部分的属性的名称。模型对象具有自己的属性,您可能(在某些情况下必须)提供模型键路径以及控制器键。
我假设Interface Builder会自动创建一些执行所有同步操作的方法。是吗?
不。 IB永远不会创建方法。 Bindings系统完成所有同步工作,并且它已经存在。 IB只是调用它(具体来说,它调用我在my answer to your other question中提到的bind::::
方法。)
当我“绑定到:文件所有者”时,它意味着什么?
文件所有者是拥有nib文件中所有顶级对象的对象。 MainMenu nib的所有者是应用程序对象(NSApp
)。在基于文档的应用程序中,文档对象将加载包含文档窗口的笔尖;因此,它是窗口的所有者,以及该笔尖中的任何其他顶级对象。
这是我的主文件里面的文件吗?
没有这样的文件,因为没有这样的方法。有一个main
函数,但它是一个函数,而不是一个对象的方法。那里没有任何对象,所以你无法绑定它。
并且您无法绑定到文件,只能绑定到对象。将程序链接到单个可执行文件时,源文件将消失*。可执行文件仅包含类和函数,并且nib包含对象(类的实例)。
如果你问的是哪个文件被拥有,那就是nib文件(或者更确切地说,它的内容 - 但“文件内容'所有者”有点长。)
*嗯,除了调试符号,它们标识每条指令的文件名和行号。
答案 1 :(得分:0)
您绑定的对象必须与key value coding和key value observing兼容。 Bindings只是一个包装器,它以一种导致代码少得多的方式使用这两种技术。
如果你真的想知道它是如何运作的,那就是an entry in Mike Ash's blog how KVO works.。
我不知道你是否想要那么多细节。我建议你阅读intro to bindings of cocoadevcentral.com。它在解释它们方面做得相当不错。
关于文件所有者的具体问题,Apple写道:
每个Cocoa应用程序都有一个主笔尖 包含的文件 特定于应用程序的菜单和 可能是一个或多个窗口。的 NSApp表示 是文件的主笔尖的所有者 文件。当应用程序启动时, NSApp加载主nib文件, 取消归档,并显示菜单 和初始窗口。