【问题标题】:Cocoa Bindings (Files Owner vs. App Delegate)Cocoa 绑定(文件所有者与应用程序委托)
【发布时间】:2013-02-26 14:45:54
【问题描述】:

我刚开始使用 Cocoa Bindings,并且正在开发我的第一个应用程序。

许多示例和书籍使用NSArrayController,但由于我只想将单个对象及其属性绑定到一些文本字段,因此我使用了NSObjectController。我也没有基于文档的应用程序。我的应用程序是一个简单的单窗口应用程序。

当我尝试像所有示例一样将我的NSObjectController 绑定到文件所有者时,我开始遇到问题。如果我这样做,我将无法编译应用程序。我总是收到“此类不符合键值要求”错误。
但是,如果我将NSObjectController 绑定到我的应用程序的 AppController 实例,它就可以正常工作。我还设法将文本字段绑定到NSObjectController 的字段。这也可以正常工作。

但我不知道我做的是否正确。我发现的所有样本都绑定到文件所有者——这对我的应用程序不起作用。绑定到应用程序控制器似乎是非基于文档的应用程序的完美方式。

【问题讨论】:

    标签: cocoa binding cocoa-bindings


    【解决方案1】:

    当您绑定NSObjectControllercontentObject 绑定时,您所做的是告诉控制器如何找到您希望它编辑的对象。这是使用键值编码完成的,其中一个字符串用于在潜在的许多对象关系中导航以定位一个值。在运行时,对象控制器将调用 [object valueForKeyPath:keyPath],使用您绑定控制器的对象和您在 Interface Builder 中指定的键路径。

    Interface Builder 中的 File's Owner 出口指的是在加载 NIB 时指定为 owner 的对象。在基于文档的应用程序中,这通常是NSWindowController。在非文档应用程序中,文件的所有者通常是 NSApplication 实例。但是您没有(也不应该)子类化 NSApplication,因此在您的应用程序中,File's Owner 不是寻找对象的正确位置。

    相反,您很可能已将对象添加到您的应用程序委托中,因此将对象控制器绑定到非基于文档的应用程序中的应用程序委托是有意义的。作为建议,我将回到您之前处理过的示例,看看您是否可以弄清楚这些对象控制器如何找到它们的内容对象。一旦你看到对象控制器和它控制的对象之间的联系,绑定对你来说应该会更有意义。

    【讨论】:

      【解决方案2】:

      您想将您的 ObjectController 绑定到一个对象。如果您正在使用单个 nib 处理非文档应用程序,那么文件的所有者将是 NSApplication 的一个实例。

      不要认为绑定到文件的所有者有什么特别的,它只是 nib 对象所有者的占位符 - 您可以在 nib 文件的检查器中看到这一点。绑定到任何合适的对象。

      【讨论】:

        猜你喜欢
        • 2011-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-15
        • 2018-03-23
        • 1970-01-01
        • 2013-08-01
        相关资源
        最近更新 更多