2010-04-11 39 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: