从Web加载(并显示).XIB

时间:2010-04-11 19:06:20

标签: iphone nib xib

我希望能够下载(通过NSURLConnection请求).XIB文件,并将其显示在视图中。我已经实现了NSURLConnection,当然,当连接完成时,我留下了表示XIB文件的XML数据的NSString。示例:(只是前几行中的几行)

<?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窗口,可以显示从Web加载的.XIB。如果我可以将它本地附加到ViewController,那就更好了,但并非完全必要。

我只是不确定如何使用“loadNibFile:externalNameTable:withZone:”任何人都可以给我一些建议或示例吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

loadNibFile:externalNameTable:withZone:是一种AppKit方法,因此它只适用于Mac OS,而不适用于iPhone或iPad。

在SDK 3.2中,您可以使用 - [UIViewController initWithNibName:bundle:]或 - [NSBundle loadNibNamed:owner:options:],具体取决于您是否希望File的Owner为UIViewController。如果您不能下载.xib并将其安装到主包的资源中,那么您可以下载一个包,将其保存到Documents目录中,将其传递给+ [NSBundle bundleWithPath:],然后提取使用initWithNibName创建一个.xib:bundle:或loadNibNamed:owner:options。

我没试过这个,但似乎它应该有效。我很想知道它是否确实存在。

我也很想知道Apple是否接受这个应用程序。看来这会将iPhone SDK协议的第3.2.2节放到测试中。

答案 1 :(得分:1)

您将无法使用普通.xib文件执行此操作,因为需要将这些文件编译为二进制格式以便在实际应用程序中使用。

如果您确实将.xib文件编译成适当的iPhone .nib文件,您可以将它们放在外部包中并将该包下载到应用程序的Documents目录中。然后,您可以使用+bundleWithPath:等创建NSBundle实例,并将Nib名称和包传递到UIViewController的–initWithNibName:bundle: