我一直在阅读在线教程和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进行斗争,因为它与这些绑定有关。
我昨晚试了这个(字面意思是我在XCode的第二天),而且我得到了一个在调试器输出中抛出的异常,所以我认为我一定是做了一些错误的事情,然后在网上寻找其他方法做绑定。这是你的方式,并再次得到例外。但只是我跟踪了这一事实,即默认的基于文档的应用程序覆盖Apple开始提供的“ViewController”模板中的“mappedObject”。我拿掉了'override var representObject:Any?'的调用,现在它可以工作了!非常感谢你的帮助。 –
很高兴能帮到你! –
如果可编辑,则将'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