2017-10-11 81 views
0

我一直在阅读在线教程和Apple文档,但作为编写Cocoa应用程序(25年嵌入式C/C++固件&网络代码)的新手,这种黑暗的可可绑定艺术对我来说毫无意义。在基于文档的Swift应用程序中看起来很暗的可可绑定艺术

1)我在XCode中创建了一个基于MacOS Cocoa应用程序的文档。

2)其中,我创建了一个名为DocumentData的类,NSObject的子类。 3)DocumentData是“foo”和“bar”,两个“动态”属性均为Strings

4)我的Document子类NSDocument包含DocumentData属性,称为docData

5)以我Document类的makeWindowControllers()方法,我设置viewController的表示物体通过将下面是其docData属性,self.addWindowController(windowController)后:

if let viewController = windowController.contentViewController as! ViewController? { viewController.representedObject = self.docData }

6)在视图控制器场景我在视图控制器视图中添加了两个NSTextFields,并将它们分别称为“Foo”和“Bar”。

7)我用助手把它们拖动到视图控制器swift代码窗口中,在视图控制器中分别创建了两个IBOutlets,分别称为“foo”和“bar”。

8)在我Document类的read()方法,我添加了两行代码来设置docData对象的两个属性:

docData.foo = "foo" 
    docData.bar = "bar" 

在这一点上,我想,如果我能得到可可绑定设置正确,当我从应用程序的“文件”菜单中使用“打开”打开具有我的应用程序文件扩展名的文档时,我认为应该出现一个窗口,其标题设置为我选择的文件的名称, NSTextField窗口中的对象分别表示“foo”和“bar”。

问题是,我完全困惑于如何做这些绑定。我已经看到了10种不同的绑定方式,但似乎没有任何效果。

我应该添加一个NSArrayController到视图控制器?

我应该添加一个NSObjectController到视图控制器?

究竟是如何,在XCode的可笑混乱的用户界面,我应该设置什么绑定?

我相信这可能很简单,但我不明白。非常感谢任何帮助或任何指向在线教程的指针,这些教程在XCode IDE中的使用经验远不及我在网上找到的那些经验。

当这对我有用时,我很高兴将代码放在github的某个地方,并对其进行评论以帮助其他人与XCode的恶意IDE进行斗争,因为它与这些绑定有关。

回答

0

步骤1-6都很好。步骤7对于绑定来说不是必需的,但是您可能仍然需要为您的应用程序添加此功能。第8步都很好。

我似乎你所缺少的是将NSTextFields绑定到你的视图控制器。

您可以将它们直接绑定到您的视图控制器,而无需使用NSObjectControllerNSArrayController

在界面构建器中,在右侧的绑定检查器选项卡中,您将绑定value属性至foobar

Bind to将被选中并且您的视图控制器被选中。

Controller Key将为空,并且Model Key Path将为self.representedObject.fooself.representedObject.bar,具体取决于您绑定的文本字段。

有关可用绑定的更多信息,请查看NSTextField here的绑定文档。

欲了解更多关于正确绑定的“黑暗艺术”,请看我在我的回答here中链接的示例项目。

+0

我昨晚试了这个(字面意思是我在XCode的第二天),而且我得到了一个在调试器输出中抛出的异常,所以我认为我一定是做了一些错误的事情,然后在网上寻找其他方法做绑定。这是你的方式,并再次得到例外。但只是我跟踪了这​​一事实,即默认的基于文档的应用程序覆盖Apple开始提供的“ViewController”模板中的“mappedObject”。我拿掉了'override var representObject:Any?'的调用,现在它可以工作了!非常感谢你的帮助。 –

+0

很高兴能帮到你! –

+1

如果可编辑,则将'NSTextField'绑定到NSController的子类。它效果更好。 'NSController'实现'NSEditor'和'NSEditorRegistration'非正式协议。 [为什么NSControllers有用?](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CocoaBindings/Concepts/WhatAreBindings.html#//apple_ref/doc/uid/20002372-177085) – Willeke

相关问题