我一直在閱讀在線教程和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