Xcode 6.3: 在捆绑包中无法加载NIB

20
当使用Xcode 6.3(iOS 8.3 SDK)编译时,某些nib文件名在特定情况下会多出一个~ipad~iphone。例如,ViewController~ipad.xib变成了ViewController~ipad~ipad.nib。这会导致应用程序崩溃,因为应用程序不希望编译后的nib文件具有双重后缀。

1
如果你正在使用Size Classes,为什么还需要使用~(iphone|ipad).xib后缀来定位你的xib文件呢?所以我猜这是期望的行为。 - Camsoft
正确的——我们打算将xib文件针对特定的设备类型进行定位。在Xcode 6.3发布之前,在这些文件中启用大小类并不会引起任何问题。 - Cameron Spickert
我怀疑之前的版本可能存在漏洞或设计缺陷。 - Camsoft
3个回答

39

为解决此问题,请在Interface Builder中的任何受影响文档中取消选中“使用大小类”。

这似乎是Xcode 6.3(和iOS 8.3 SDK)附带的ibtool版本中的一个错误。它发生在以下情况下:

  • 您具有启用了大小类的特定设备输入文件* ~(iphone | ipad).xib
  • 您的部署目标早于iOS 8.0。

我能够在命令行上重现这个问题:

xcrun --sdk iphonesimulator8.3 ibtool --minimum-deployment-target 7.0 --compile ViewController~ipad.nib ViewController~ipad.xib

如果您遇到相同的问题,请复制此雷达这个问题似乎在最新的Xcode 6.4 beta版本中已经修复了。


文件有问题吗?任何遇到此问题的人都会感激一个雷达号码。 - Jon Shier
我唯一要说的是,如果你禁用了尺寸类别,那么你将失去任何为定义的尺寸类别而创建的布局,因此这个解决方案只适用于在iPhone和iPad上都仅使用常规尺寸类别的情况下。 - Camsoft
@Camsoft 没错。我们想要将我们的xibs针对特定的设备类型进行定位,而且不想启用大小类。我们只是没有想到禁用它,因为在Xcode 6.3之前从来没有出现过问题。 - Cameron Spickert
@jshier 感谢您的建议 - 我已经提交了 一个雷达 - Cameron Spickert
尽管这可能是一个错误,但它是有道理的。我的意思是,如果你有一个以iphone.xib或ipad.xib结尾的xib文件,那么这意味着你不想使用Size Classes,而是想在不同的文件中定义布局。因此禁用它是有道理的。 - Pauls
只要xib默认使用大小类,而且在查看了约40个xib之后,我可以说这绝对是一个bug :) - HenryRootTwo

2

在加载程序包时,将xib名称中的~更改为_并明确指定后缀。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接