2015-12-21 46 views
1

我最近開始學習iOS開發,並喜歡使用Xcode的界面構建器。這很容易添加賽格和插座和「事件處理程序」thingys(抱歉,我不知道他們叫什麼)。當我在Xcode的界面生成器中做些什麼時,幕後會發生什麼?

不過,我弄糊塗了,當我添加標籤或某事的出口,並認爲這獲取代碼

@IBOutlet var weak myLabel: UILabel! 

加入我看不到任何分配給變量!而當我使用這個變量時,它不是nil!當我在用C#做Windows窗體時,每當我在界面設計器中添加一些東西時,就會在一個單獨的文件中生成一些代碼來實際「添加」這個東西。

我知道故事板文件只是xml文件。每當我對它做些什麼,xml都會改變。但我不相信xml可以做反射來爲我的變量賦值,可以嗎?

因此,我推斷必須有一些代碼在幕後生成,這些代碼反映了我的代碼併爲outlet變量賦值。我在哪裏可以找到這個文件?究竟添加了什麼?或者我的猜測是錯誤的?

+0

可以作爲源代碼打開相同的XIB或故事板文件。在左側的File View中右鍵單擊它並選擇Open As> Source Code。 – hannad

+0

在Storyboard中點擊你的標籤和實用程序(xcode中的右側面板) - >屬性檢查器,你可以看到標籤的所有默認設置。您可以在此處或通過myLabel插座在代碼中進行更改。 –

+0

@F_Boris我知道這一點。我不知道的是變量如何分配,我看不到任何分配。 – Sweeper

回答

2

的.storyboard文件裏面,您所創建的網點都堅持像這樣:

<connections> 
    <outlet property="myLabel" destination="PM2-8V-67p" id="yvq-yW-6rD"/> 
</connections> 

property鍵值對引用它連接到變量的名稱。 KVP指向您所連接的故事板中的元素。

是的,故事板只是簡單的XML,但是當您構建項目時,它們會像其他源代碼一樣編譯,特別是編譯後的NIB文件。您會在故事板中的每個視圖中找到編譯的NIB文件。然後,當你加載你的視圖時,它將適當編譯的NIB加載到內存中,創建你在故事板中創建的實際對象表示,並使用setValue:forKey:訪問器方法(在iOS中)將這些對象屬性連接到這些對象。你可以找到很多關於整個生命週期的NIB這裏的更多信息:

Mac Developer Library: The Nib Object Life Cycle

至於存在編譯NIB文件,其中,你可以看到他們在你的build文件夾(發現礦DerivedData/<YourBuildFolder>/Build/Products/Debug-iphoneos/<YourProjectName>/)。從故事板生成的人可以在Base.lproj文件夾中找到。

+0

爲什麼故事板叫做XIB文件?他們不是'.storyboard'文件嗎?這是我需要尋找的另一個文件嗎? – Sweeper

+0

我不應該在我的答案中包含對XIB的引用。 .XIB文件是在Interface Builder中創建單個視圖時創建的,而Storyboard則是多個視圖,Seglog和其他對象的集合。最後,故事板中的每個視圖都會被編譯爲NIB文件。要查看這些內容,請查看DerivedData//Build/Products/Debug-iphoneos/ /Main.storyboardc包內部。我會更新我的答案,以便更清楚一點。 – kleezy

相關問題