在 iOS 上使用下载包中包含的 XIB/NIB 文件

Posted

技术标签:

【中文标题】在 iOS 上使用下载包中包含的 XIB/NIB 文件【英文标题】:Using XIB/NIB files contained within downloaded bundles on iOS 【发布时间】:2012-01-08 18:59:35 【问题描述】:

从表面上看,这似乎是一个非常简单的问题,但由于某种原因,我无法让它工作。

我有一个杂志风格的应用程序,它以压缩包的形式下载每期的数据。

下载并解压后,应用程序会按预期成功访问捆绑包中包含的各种文件。其中包括 JSON、PNG、JPG、视频等。

但是,我还包含了一个 XIB 文件,其中包含一系列 UIView 中内容的物理布局,而我不能使用这个文件。

该文件存在,但是当我尝试使用以下方式加载它时:

UIViewController *controller = [[UIViewController alloc] initWithNibName: @"ViewController" bundle: assetBundle];

我收到以下错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/C6718DB8-0C0F-4D38-84E6-55C145279957/Documents/asset-4.bundle> (not yet loaded)' with name 'ViewController''

现在,这是 ios 对不从下载的包访问 XIB 施加的限制,还是我在调用 XIB 以供使用时犯了一些错误?

但是,我找不到任何明确禁止以这种方式使用获取的捆绑包。

【问题讨论】:

【参考方案1】:

我不确定您是否可以“合法地”摆脱这种情况。但问题可能是您提供的是“xib”而不是“nib”的编译版本。

您可以使用提供的ibtool 程序从命令行手动执行此操作。

ibtool --errors --warnings --output-format human-readable-text --compile $OUTPUT_NAME $INPUT_NAME

然后,您可以将编译后的 .nib 文件放入包中并按照您的尝试进行加载。

【讨论】:

我猜是合法的,因为XIB不是可执行代码,只是界面布局。 希望如此!无论如何,我已经向 Apple 提交了一个请求以找出答案 - 我会在收到回复后发布他们的详细回复。 这可能没问题,因为您没有加载任何可执行代码。但总有机会。 我在派生数据位置而不是在创建包的文件夹中进行编译。谢谢。 任何线索是什么意思? Interface Builder Cocoa Touch Tool[40004:13603] CFPreferences:文件中的用户主目录://localhost/Users//Library/Application%20Support/iPhone%20Simulator/User/ 不可用。用户域将不稳定。

以上是关于在 iOS 上使用下载包中包含的 XIB/NIB 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上反编译或解释 XIB/NIB 文件

MainWindow.xib nib 文件有啥用?

iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化

如何在框架内加载 `.xib` / `.nib` 文件?

。XIB / .NIB文件无法正确加载

在 Windows 上使用 Rtools 中包含的不同 gcc 版本和 Rcpp