Xcode使用通用应用程序的名称后缀不正确构建nib文件

时间:2015-04-14 09:01:10

标签: ios xcode ios-universal-app

这真的很奇怪,似乎随机发生在一些xib文件中。我目前正在将一个iPad应用程序移植到iPhone上,为此我创建了新的xib文件并为它们添加了~iphone后缀。这很好用,我之前从未遇到过问题。但是对于这个特定的项目,一些生成的nib文件(当你构建你的应用程序时,xib被编译成nib文件)没有正确的后缀,或者没有编译正确的xib文件。我尝试了几个设置,这就是结果:

案例A

首先尝试,我像往常一样创建了移植的xib文件:

  • 原始文件: QuestionViewController-NoOptions.xib
  • 移植文件: QuestionViewController-NoOptions~iphone.xib

Xcode会生成这两个文件:

  • QuestionViewController-NoOptions~ipad.nib
  • QuestionViewController-NoOptions~iphone.nib

哪个是正确的名称,但 ~iphone 只是 ~ipad 的副本。

案例B

我尝试重命名这两个文件:

  • 原始文件: QuestionViewController-NoOptions~ipad.xib
  • 移植文件: QuestionViewController-NoOptions~iphone.xib

Xcode将生成:

  • QuestionViewController-NoOptions~ipad~ipad.nib
  • QuestionViewController-NoOptions~iphone.nib

对于这种情况,这两个文件都是正确构建的,但当然 ~ipad~ipad 一个人不能在ipad上工作(App崩溃抱怨无法找到{{ 1}})。

案例C

更糟糕的是:

  • 原始文件: QuestionViewController-NoOptions~ipad
  • 移植文件: QuestionViewController-NoOptions~ipad.xib

Xcode将生成:

  • QuestionViewController-NoOptions.xib
  • QuestionViewController-NoOptions~ipad~ipad.nib
其中 ~ipad~ipad 是正确的

,但 ~iphone 只是 ~ipad~ipad 的副本。

一些随机事实:

  • 有些xib正在使用自动布局,其他一些没有,如果我启用或禁用此功能,行为会发生变化(我有一个 ~iphone~iphone 和一个 ~iphone 一起)。
  • 我在xib源代码上手动播放了这一行(删除或添加QuestionViewController-NoOptions~iphone.nib部分),但没有有用的结果:

    iPad

以前有人遇到过这个问题吗?任何线索都会有所帮助......谢谢!

1 个答案:

答案 0 :(得分:6)

问题是在某些xib文件中我使用大小类使用大小类选项已在文件检查器上激活) 。似乎 Size Classes 用于替换旧的~iphone~ipad后缀,如果您使用它,它将自动为您创建后缀nib文件。禁用大小类就可以了,现在一切都按照假设运行了。