2011-04-02 69 views
13

Objective-c是可學習的;可可是可以學習的;我發現Interface Builder和它的後代Xcode 4是完全不可思議的!沒有文字(相當於C或Obj-c源代碼)可以參考。所有的描述都是「拖在這裏;連接; Ctl拖到那裏」,我仍然失去......Xcode 4中的可可綁定

我一直在嘗試通過關鍵技術的各種蘋果示例。我一直在瀏覽Cocoa Bindings和Apple開發人員示例NSTableViewBinding中的示例文件。爲了試圖理解它,我一直試圖複製它。

現在請參閱方法頂部的註釋MyWindowController.m如何在Xcode 4中建立這些連接?

enter image description here

  1. Object稱爲TableArray無論是在對象庫或在源代碼中不存在;這是從哪裏來的?

  2. Referencing Bindings右邊;這些是如何創建的?

  3. awakeFromNib方法頂部提到的各種鍵/值對;這些是如何創建的?

我知道,Xcode 4應該是一個更直接的改進,但我很困惑的替代IB。網絡上的所有IB資料都是指完全不同的早期版本,所以我找不到很多幫助。

後續

我沒搞清楚可可綁定在Xcode 4,我能夠在幾行代碼複製示例程序的功能成功。

下面是我花了一段時間才能找出的問題:

  1. TableArray是從對象庫拖過的對象列表中XIB的Array Controller Object然後改名。 (請注意蘋果:在右鍵點擊HUD視圖中,基礎對象類會很好)

  2. Stephen Poletto's答案是連接它的一個寶貴的指南。

  3. 目前尚不清楚,我的連接接口在右側單擊HUD是如何工作的: figure 2

  4. 存儲陣列myContentArray是在Array Controller Object

  5. 單擊並拖動實例隱從TableArray的HUD到.h文件中的AppDelegate定義,以在那裏創建連接。

+4

我覺得你的痛苦,並分享你的困惑... – 2011-04-02 05:21:21

回答

13

建立在awakeFromNib註釋中描述的綁定:

  1. TableArray是一個NSArrayController。在界面生成器文檔的最左側,您將看到一個大綱視圖,顯示您的筆尖中包含的所有對象。當這個筆尖在運行時被加載時,所有的對象將被解除存檔和實例化。在你提供的截圖中,你會看到名爲「TableArray」的NSArrayController已經存在。如果由於某種原因需要創建另一個,則可以將對象庫(右下角)中的NSArrayController拖放到Interface Builder文檔中。
  2. 在Interface Builder中選擇「姓氏」表格列。您可以通過在大綱視圖中按下顯示三角形來做到這一點,直到您看到「表列 - 姓氏」或直接在IB的主畫布區域中選擇它。檢查員(在Xcode窗口的右側)現在將反映關於姓氏列的詳細信息,因爲它是當前選定的對象。選擇綁定檢查器。您可以將鼠標懸停在檢查器頂部的圖標上,直到找到標有「顯示綁定檢查器」的圖標 - 這是右邊的第二個圖標。綁定檢查器向您顯示所選NSTableColumn的所有公開綁定的列表。你會看到「Value」就是這樣一個綁定 - 這就是我們希望根據MyWindowController.m建立的綁定。旋轉「價值」旁邊的披露三角形以顯示所有綁定細節。
  3. 您現在可以指定要通過其建立要使用的綁定和控制器/模型鍵路徑的控制器。繼續並選中「綁定」複選框並從「綁定到:」彈出式按鈕中選擇「TableArray」。然後,將「arrangeObjects」指定爲控制器密鑰,將「firstname」指定爲模型密鑰路徑。
  4. 你會注意到輸入「firstname」導致Xcode在工具提示框中出現一個灰色的警告圖標「Xcode無法解析輸入的keypath」。 Xcode將嘗試解析您輸入的keypath。因此,如果您通過包含Person類對象的NSArrayController進行綁定,並且類Person定義了一個名爲「address」的屬性,則「arrangeObjects.address」將會正確解析,並且Xcode會驗證您的keypath是否正確。但在這個例子中,數組控制器正在管理NSDictionary對象,並且Xcode無法知道您在這些字典中存儲了哪些鍵/值對。作爲開發人員,您應該知道存儲在NSArrayController中的字典確實包含「名字」/值對,因此您可以忽略該警告。
  5. 對MyWindowController.m頂部列出的其他綁定重複。

連接檢查器的引用綁定部分顯示已通過所選控制器建立的所有綁定。因此,如果您選擇TableArray並導航到連接檢查器,您現在將看到「arrangeObjects.firstName」 - > Value,Table Column - First Name。這顯示了你剛剛建立的綁定。

在深入探討像Cocoa Bindings這樣更高級的主題之前,可能很適合與Interface Builder合作。使用它來創建IBOutlet和IBAction連接,這些連接本身在IB內以及IB和源代碼之間。習慣於使用檢查器來修改UI對象的屬性等。一旦您對IB的一般工作流程感到滿意,解決綁定問題將會更容易。 Here's幫助指南。

+0

我實際上已經花了相當多的時間習慣'IBOutlet'和'IBActions',並用按鈕,NSScrollViews和NSTexViews編寫了10個簡單的應用程序。只是這裏的學習曲線不是線性的。這是另一個陡峭的部分(對我來說反正......) – dawg 2011-04-02 17:39:54

+0

這是非常清晰的教程給我。謝謝!!!使用NSArray作爲NStable的數據源在概念上是非常優雅和清晰的。用IB連接它並不是很清楚...... – dawg 2011-04-02 17:48:55

+0

問題:有沒有辦法查看綁定,連接和IB監察員設置的已收集文本列表?即,如果我打開一個從Apple下載的項目,則類和方法非常清晰。爲了理解IB配置各種對象的方式,我是否需要點擊所有各種檢查器,或者點擊X並獲取列表?你如何看待和理解其他人組裝的XIB文件? – dawg 2011-04-02 17:53:17

1

就基本概念而言,Xcode 4的By-now-integrated Interface Builder部分與舊Interface Builder沒有什麼不同。

下載Apple網站上仍然提供的XCode 3,並按照在線提供的教程進行操作。

或者有人比我更有助於在SO可以寫使用的Xcode 4一個很好的教程...

這就是說,讓我嘗試解釋你的幾件事情。 (但是我確實推薦在這裏使用Xcode 3,我並不是說Xcode 3在本質上更好;我只是說Xcode 3有更多的教程,這樣你就可以更容易地理解概念,然後與Xcode 4一起使用。)

  1. nib/xib文件包含存檔對象。在界面生成器(無論是獨立還是統一到Xcode中)通過創建活動對象來創建nib/xib文件,然後在保存文件時將其凍結到歸檔對象中。 TableArray是在nib文件內創建的實例。您可以將一個通用對象從對象庫拖到一個筆尖,並將其類更改爲任何您想要的。這就是對象的創建方式。

  2. 您不會創建引用綁定。綁定有一個方向,從對象A到另一個對象B.您可以在A的邊上設置綁定(本例中爲NSTableColumn)。引用綁定只是在B側顯示這些信息。因此,選擇IB中的表視圖列並在那裏設置綁定。

  3. 這是在NSTableColumn的綁定窗格上完成的。

+0

1:所以要創建'TableArray'我只是將一個通用的'對象控制器'從對象庫拖到'Objects'區域,然後重命名'TableArray'?那又怎麼樣? 2:** GOT ONE !!! ** OK,a)右鍵單擊NSTableView的列部分,並在那裏綁定。 3:errr - NSTableColumn的綁定窗格在哪裏? – dawg 2011-04-02 05:34:30

+0

我真的推薦你下載XCode 3並在這個階段使用它。這遠不那麼痛苦。買Hillegass的Cocoa書並閱讀它。 – Yuji 2011-04-02 09:14:39