2

我希望能够(通过 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 的小窗口,可以显示从网络加载的 .XIB。如果我可以将它本地附加到 ViewController 就更好了,但不是完全必要的。

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

提前致谢!

4

2 回答 2

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 节进行测试。

于 2010-04-12T09:42:56.593 回答
1

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

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

于 2010-04-13T15:34:59.247 回答