1

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

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

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

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

4

2 回答 2

3

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

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

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

于 2009-10-15T13:45:41.450 回答
0

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

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

于 2009-10-15T09:44:30.150 回答