【问题标题】:What is the job of an Object I am binding to?我绑定的对象的工作是什么?
【发布时间】:2010-10-10 10:06:00
【问题描述】:

当我使用 Interface Builder > Inspector > Bindings 为我的一个视图项(即文本字段)设置绑定时,我必须指定此视图项将绑定到的对象。

所以我现在想知道,我在“绑定到:”中指定的这个对象的具体工作是什么? 我假设 Interface Builder 会自动创建一些方法来完成所有同步工作。对吗?

当我“绑定到:文件的所有者”是什么意思?那是我的文件里面有 main-Method 吗?

【问题讨论】:

    标签: objective-c cocoa binding


    【解决方案1】:

    您绑定的对象必须与key value codingkey value observing 兼容。 Bindings 只是一个包装器,它使用这两种技术以减少代码。

    如果你真的想知道它是如何工作的,这里有an entry in Mike Ash's blog how KVO works.

    我不知道你是否想要那么多细节。我建议你阅读intro to bindings of cocoadevcentral.com。它可以很好地解释它们。

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

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

    【讨论】:

    • 不,文件的所有者通常不是窗口控制器。如果您直接调用它,它可以,但指定另一个对象(通常是自己)作为所有者更有用。 NSDocument 正是这样做的:文档拥有 nib 的对象。
    【解决方案2】:

    ...我在“绑定到:”中指定的这个对象的具体工作是什么?

    您将视图绑定到控制器。控制器拥有模型;您绑定到的控制器键是为该模型的某些部分提供服务的属性的名称。模型对象有自己的属性,您可以(在某些情况下必须)提供模型键路径以及控制器键。

    我假设 Interface Builder 会自动创建一些方法来完成所有同步工作。对吗?

    不。 IB 从不创建方法。 Bindings 系统完成了所有同步工作,而且它已经存在。 IB只是调用它(具体是调用我在my answer to your other question中提到的bind::::方法)。

    当我“绑定到:文件的所有者”是什么意思?

    文件的所有者是拥有 nib 文件中所有顶级对象的对象。 MainMenu nib 的所有者是应用程序对象 (NSApp)。在基于文档的应用程序中,文档对象将加载一个包含文档窗口的 nib;因此,它是窗口的所有者,以及该 nib 中的任何其他顶级对象。

    那是我的文件里面有 main-Method 吗?

    没有这样的文件,因为没有这样的方法。有一个main 函数,但它是一个函数,而不是一个对象的方法。那里没有对象,所以你不能绑定它。

    而且您不能绑定到文件,只能绑定到对象。当您将程序链接到单个可执行文件时,源文件会消失*。可执行文件仅包含类和函数,而 nib 包含对象(类的实例)。

    如果您要询问所拥有的文件是 nib 文件(或者更准确地说是其内容,但“文件的内容所有者”有点长)。

    *好吧,除了调试符号,它标识每条指令的文件名和行号。

    【讨论】:

    • "(具体来说,它调用了我在回答您的其他问题时提到的 bind:::: 方法)" ...我不明白这个绑定方法调用。谁实现了这个被调用的方法?
    • 苹果有。它是 NSKeyValueBindingCreation 协议的一部分,该协议是 Application Kit 的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多