Xcode 4.5是否会破坏XIB文件?

45

我正在使用新的 Xcode 4.5, 在某个视图控制器中,我有以下代码:

DiscoverCell* cell=[table dequeueReusableCellWithIdentifier:@"DiscoverCell"];
if(cell==nil){
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DiscoverCell" 
                                                 owner:self 
                                               options:nil];
    cell = [nib objectAtIndex:0];
} 
当我运行应用程序时,它抛出以下错误:终止应用程序,因为未捕获异常'NSInternalInconsistencyException',原因是“NIB数据无效。”在LoadNib行上,这是什么?这个Xcode是苹果的垃圾吗?
答案:当我运行应用程序时,它抛出以下错误:“终止应用程序,因为未捕获异常'NSInternalInconsistencyException',原因是“NIB数据无效。”发生在LoadNib行上。请问该如何解决?是否与Xcode有关?

当我尝试在iOS 5.1设备上启动带有NIB的应用程序时,遇到了相同的问题...(当我在模拟器中启动应用程序时,一切正常。)我的解决方法是使用Xcode 4.4... - Lindemann
10
在右侧使用文件实用程序面板,确保你的 NIB 项目目标设置为 iOS5(如果这是你的部署目标)。在 Xcode 4.5 中,默认情况下该设置为项目,即 iOS6,并且会以不向后兼容的方式更改和保存 NIB。将所有 NIB 更改为实际的 iOS 版本进行部署并保存。 - Jason Coco
如果您正在使用iOS6,请确保查看此帖子:https://dev59.com/t2ct5IYBdhLWcg3wAo-H - Kassem
我有同样的问题,但我知道那是个问题。如果它已经取消选择,则选择,保存并运行,停止未选择,然后再次保存并运行。在我的情况下,这使它工作了。 - user1808329
嘿@dima,这是一个很好的问题,就像你一样美丽。 - YogiAR
8个回答

71

我曾经遇到同样的问题,解决方法是在“工具”下的“文档检查器”面板上取消勾选“使用自动布局”复选框。


有人报告了吗?这个问题很严重。 - Tin Can

58

取消下图中突出显示的“使用自动布局”选项。Xcode 4.5默认启用此属性,适用于您添加到项目中的新nib文件。取消自动布局复选框可解决问题。


8

我刚遇到了这个问题,发现是由于一个UIButton的Title字段在Attributes Inspector中被设置为Attributed导致的。将其改为Plain即可解决问题。如果我没记错的话,我是在上一个Xcode版本中添加了这个按钮,并且当时也遇到了麻烦。


你只需要重新编写标题,因为更改为普通文本时,它会被清除,但所有字体和颜色设置都会保留。 - Sergi Ramón
那如果我需要它被归属呢? - Antzi

6
对我来说,这是Jason Coco的评论和tomgerhardt的答案的结合:我的应用程序针对iOS5,我升级到Xcode 4.5并创建了一个新的NIB。默认情况下,此目标为iOS6,导致崩溃。我在NIB的文件检查器窗口中将其设置为iOS5。
然后我收到一个编译器错误,告诉我不支持iOS5使用自动布局,在文档检查器中关闭它,我的问题就解决了。

4

我正在使用Xcode 4.5和iPhone模拟器5.0,在显示第一个表格时遇到了相同的错误。按照“取消自动布局”的建议,通过将文档版本切换到iOS 5.0,使其正常工作。(选择Storyboard -> 文件标识选项卡 -> 接口生成器文档 -> 文档版本)。自动布局已经取消选择。


2
所以,经过大约一个小时的尝试,我终于找到了问题所在。正如上面所描述的那样:确保你的.xib文件与主应用程序编写的目标版本相同(在这种情况下,很可能是小于6.0),并在此特定的.xib选项中取消“使用自动布局”。
之所以它能在模拟器中运行,是因为模拟器实际上正在运行iOS6。当尝试使用较旧版本的iOS设备时,会导致出现此错误。我的问题是,我正在创建一个默认针对iOS 6的自定义TableViewCell,并且已选中“使用自动布局”。这就是我的罪魁祸首。
希望我能够帮助到遇到这个错误的人!

2

我关闭了所有.xib文件的自动布局,但仍然出现错误。这是因为我在.xib文件中使用了Text -> Attributed来设置UILabel。

将其设置为Plain后,错误消失了。


0
“loadNibNamed:” 后面的名称必须是nib文件的名称(在屏幕左侧的项目导航器中),有时人们会在那里写上“cell identifier”,这是从CellForRowAtIndexPath(静态NSString ...)开始编写的。
也许你的问题就在这个小错误?

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