2017-10-11 82 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

相關問題