2010-04-11 70 views
2

我希望能夠下載(通過NSURLConnection請求)一個.XIB文件,並將它呈現在視圖中。我已經實現了NSURLConnection,當然,當連接完成時,我剩下一個表示XIB文件的XML數據的NSString。例如:(很多隻是第幾行)從網絡加載(並顯示).XIB

<?xml version="1.0" encoding="UTF-8"?> 
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10"> 
    <data> 
     <int key="IBDocument.SystemTarget">800</int> 
     <string key="IBDocument.SystemVersion">10D573</string> 
     <string key="IBDocument.InterfaceBuilderVersion">762</string> 
     <string key="IBDocument.AppKitVersion">1038.29</string> 
     <string key="IBDocument.HIToolboxVersion">460.00</string> 
     ET CETERA... 

我通過文件一看,我認爲,我不能用「initWithNibName:」因爲它正在從網絡上檢索。我相信我需要做的是將.XIB保存到應用程序的文檔目錄,然後使用「loadNibFile:externalNameTable:withZone:」

基本上我想要做的是有一個iPad應用程序,並且有一個小的320x480窗口,其中可以顯示從網絡加載的.XIB。如果我可以將它本地附加到ViewController上,那就更好了,但並非完全必要。

我只是不完全確定我應該如何使用「loadNibFile:externalNameTable:withZone:」任何人都可以給我一些建議或例子嗎?

提前致謝!

回答

3

loadNibFile:externalNameTable:withZone:是AppKit的方法,所以它僅適用於Mac OS,而不是iPhone或iPad。

在SDK 3.2中,您可以使用 - [UIViewController initWithNibName:bundle:]或 - [NSBundle loadNibNamed:owner:options:],具體取決於您是否希望文件所有者是UIViewController。雖然你是對的,你不能下載.xib並將其安裝到你的主包的資源中,但你可以下載一個包,將它保存到你的Documents目錄中,傳遞給+ [NSBundle bundleWithPath:],然後提取使用initWithNibName:bundle:或loadNibNamed:owner:options從它的.xib。

我還沒有嘗試過,但似乎應該工作。我會很好奇,知道它是否。

我也很想知道蘋果是否接受這個應用程序。看起來這會將iPhone SDK協議的3.2.2部分加入測試。

+0

謝謝,這確實會起作用。不幸的是,我希望能夠在iPhone/iPad上修改XML本身,然後更新視圖以反映新的XIB。我想我將不得不解析XML並將其轉換爲我的目的代碼。感謝您的幫助,但我明白了,它的確行得通,不過我不喜歡它。 – 2010-04-13 14:48:31

+0

您是否在實施IB或iPad? – cduhn 2010-04-13 18:21:47

+0

這有沒有最終爲你工作?我正在嘗試做類似的事情。 – Mark 2011-06-23 00:57:02

1

您將無法與普通的.xib文件,要做到這一點,因爲那些需要被編譯成用二進制格式的實際應用中。

如果做下來到合適的iPhone筆尖文件編譯的.xib文件,你可能能夠把那些捆綁到應用程序的Documents目錄外部包和下載中。然後你可以使用+bundleWithPath:或類似的方法創建一個NSBundle實例,並將Nib名稱和bundle傳遞給UIViewController的–initWithNibName:bundle: