我绑定的对象的工作是什么?

时间:2009-02-27 19:21:52

标签: objective-c cocoa binding

当我使用Interface Builder>检查员>绑定为我的一个视图项(即文本字段)设置绑定,然后我必须指定一个该视图项将绑定到的对象。

所以我现在想知道,我在“Bind to:”中指定了这个对象的作用到底是什么? 我假设Interface Builder自动创建一些执行所有同步操作的方法。是吗?

当我“绑定到:文件所有者”时,它意味着什么?这是我的主文件里面的文件吗?

2 个答案:

答案 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 codingkey value observing兼容。 Bindings只是一个包装器,它以一种导致代码少得多的方式使用这两种技术。

如果你真的想知道它是如何运作的,那就是an entry in Mike Ash's blog how KVO works.

我不知道你是否想要那么多细节。我建议你阅读intro to bindings of cocoadevcentral.com。它在解释它们方面做得相当不错。

关于文件所有者的具体问题,Apple写道:

  

每个Cocoa应用程序都有一个主笔尖   包含的文件   特定于应用程序的菜单和   可能是一个或多个窗口。的 NSApp表示   是文件的主笔尖的所有者   文件。当应用程序启动时,   NSApp加载主nib文件,   取消归档,并显示菜单   和初始窗口。