【问题标题】:What is the File's Owner (in Interface builder)?什么是文件的所有者(在界面生成器中)?
【发布时间】:2013-02-21 11:33:15
【问题描述】:

我是 Cocoa 的新手,我不明白 .nib 文件的 File's Owner 的概念。

这是我看待事物的方式:

  • 考虑一个描述窗口外观的文件myNibFile.nib

  • 现在,我想将一个实际的窗口连接到这个 .nib 文件。所以,我创建了一个类myWindow,它是NSWindowController 的一个子类。并且,为了进行这种连接,我将 init 方法更改如下:

         -(id)init
         {
             [super initWithWindowNibName:@"myNibFile"];
             return self;
         }
    

所以,我知道当我创建myWindow 的实例时,“系统”会查看 .nib 文件并创建适当的对象。

所以,我的问题是:

  • 为什么我必须指定我的 .nib 文件的 File's OwnermyWindow ?这不是多余的吗?

  • 我想这意味着我并没有真正理解 File's Owner 是什么。它是什么 ?为什么 .nib 文件必须属于某个东西?难道它不能在我的“应用程序”中的“某处”,当需要它时,“系统”就会去那里使用它吗?

感谢您帮助我更清楚地了解这些新概念!

【问题讨论】:

    标签: macos cocoa interface-builder nib


    【解决方案1】:

    要记住的两点:

    • 文件所有者是加载 nib 的对象,即接收消息 loadNibNamed:initWithNibName: 的对象。
    • 如果您想在加载后访问 nib 中的任何对象,您可以在文件所有者中设置一个 outlet。

    所以你创建了一个带有很多按钮、子视图等的精美视图。如果您想在从加载对象(通常是视图或窗口控制器)加载 nib 后随时修改这些视图/对象中的任何一个,您可以将这些对象的出口设置为文件所有者。就是这么简单。

    这就是为什么默认情况下所有视图控制器或窗口控制器都充当文件所有者的原因,并且在 nib 文件中也有到主窗口或视图对象的出口:因为呃,如果你正在控制某些东西,你会肯定需要有一个出口,以便您可以向它发送消息。

    之所以将其称为文件所有者并有一个特殊的位置,是因为与 nib 中的其他对象不同,文件所有者在 nib 外部而不是它的一部分。事实上,它只有在加载 nib 时才可用。因此,文件所有者是实际对象的替身或代理,稍后将加载 nib。

    希望您已经理解。如果你问,我会澄清任何一点。

    【讨论】:

    • 感谢您的回答。最后一段对我来说是最重要的:文件的所有者不是笔尖的一部分。 '你需要网点......'的答案对我无效,因为网点可以属于你添加到 NIB 的对象。我的想法是,您可以通过代码(loadNibNamed 等)链接(实际上必须)一个对象和一个 NIB,这样就不需要冗余链接 File's Owner 是是的,但是:您将如何将插座连接到该对象?你回答这个问题。
    • 我在等待一个满意的答案!也许您可以重新组织您的答案以强调最后一段。谢谢。我希望我的最后评论很清楚。
    【解决方案2】:

    要理解的基本内容是,Interface Builder 允许您创建自动相互连接的对象,而无需您的程序。您可以实例化各种对象,包括非视图对象,并且它们可以相互关联;例如,您可以创建表视图数据源的实例以及视图本身等。这种机制通常用于在主菜单 NIB 中创建应用程序委托。

    但是,由于这一切都是通过拖放完成的,因此您似乎无法在任何 NIB 对象和应用程序中已存在的对象之间建立连接,但有一个例外。

    当代码加载 NIB 文件时,您可以选择准确地指定 一个 对象,NIB 将其视为“文件所有者”。这是您在 Interface Builder 中看到的占位符;因为它可以代表应用程序中的任何对象,所以 Interface Builder 无法知道它上面有哪些可用的操作/出口。这就是您可以在“属性”选项卡中修改文件所有者的“类”的原因。

    文件所有者并不真正代表“所有权”或“父母身份”。它代表的是“加载这个NIB的对象”。

    【讨论】:

    • 我还是不明白,因为我真正从程序中调用 NIB 的方式是使用 initWithWindowNibName:@"myNibFile"。通过这个指令,我创建了 NIB 和其他对象之间的连接。
    【解决方案3】:

    File's Owner 是 IB 中的占位符,因此代码中的所有出口和操作在 IB 中都是“可链接的”,您可以控制并拖动以将屏幕上的内容连接到代码。

    【讨论】:

      【解决方案4】:

      Interface Builder 中的 File's Owner 使其知道父对象的对象类型。这以两种方式使用。首先,在 Interface Builder 中,IB 知道哪些出口和操作可供您连接。其次,应用程序框架使用它来了解如何在加载 nib 文件后将事物重新连接到其余代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多