2009-04-17 35 views
14

當我製作一個示例應用程序(即從一個標籤欄應用程序或其他東西開始)時,在我的MainWindow.xib文件中,我看到列出了5個項目 - 文件所有者,第一響應者,應用程序委託,窗口和選項卡欄控制器。iPhone Interface Builder和委託代理

如果我再創建一個.xib文件,併爲它創建一個委託,並將該文件的所有者設置爲我剛創建的新委託,那麼在對象列表中看不到「NewDelegateFile」 )爲.xib。

這對我來說沒有意義,我認爲這是爲什麼我沒有趕上iPhone的發展很快。

有誰願意花時間向我解釋這個小特點?

+1

我再次問了幾乎相同的問題http://stackoverflow.com/questions/1911916/placeholder-objects-in-interface-builder。這些答案應該提供更多細節並且不會讓人困惑。 – Casebash 2010-03-19 23:44:31

回答

24

文件所有者不是xib文件中的真實對象。它是一個代理對象。它表示在加載時將成爲xib所有者的對象。 First Responder和App Delegate也是代理服務器。第一響應者是當前位於響應者鏈上的對象。當應用程序的狀態發生變化時,另一個對象可能是第一個響應者。您可以使用此代理對象將文件 - >保存菜單等任何對象負責在任何給定時間處理它。

應用程序委託是一個實際的對象。當xib加載時它會彈出生存。正如您在Interface Builder中看到的那樣,它連接到文件所有者的委託出口。應用程序加載MainWindow.xib,它是文件的所有者。

其他xib文件通常通過委託對象加載。該委託對象是該文件的所有者。但委託本身是從代碼實例化的。它不是從xib加載的。這就是它在Interface Builder中不顯示的原因。

xib文件包含實際的序列化對象。文件的所有者和第一響應者是例外。他們代表一些其他已經存在的對象。

文件的所有者(通常是非MainWindow.xib文件中的UIViewDelgate)是雞。 xib是蛋。雞本身不包含在雞蛋中。

有點長。希望能幫助到你。

+1

我並沒有忽視這個答案。它花了我幾天的時間,一遍又一遍地閱讀並理解它。我想我現在就做。非常感謝。這與我的想法應該是如何不一致,但我會繼續讓自己的頭腦嘗試這樣思考。非常感謝您的回覆。 – 2009-04-21 19:08:55