iPad应用程序仅在设备上而不是在模拟器中加载笔尖时崩溃
Posted
技术标签:
【中文标题】iPad应用程序仅在设备上而不是在模拟器中加载笔尖时崩溃【英文标题】:iPad app crashes on loading nib only on device not in simulator 【发布时间】:2011-08-03 19:07:31 【问题描述】:我知道以前有人问过这个问题,我花了很多时间在各种线程中遵循建议,不仅在这个网站上,而且无济于事。
我正在为 iPad 开发一个包含多个视图的应用程序。这些视图中的每一个都包含一个 UITableView。一些 TableView 单元格包含使用 UITableViewCell 实现的自定义单元格。现在的问题是我可以在 iPad 模拟器上毫无问题地运行我的应用程序,但不能在实际设备上运行。在设备上 - 一旦我尝试访问包含有问题的定制 UITableViewCell 的视图,它就会崩溃并显示以下消息:
2011-08-03 20:37:13.849 myApp[658:707] Creating cell: LabledTextFieldCell.xib
2011-08-03 20:37:13.866 myApp[658:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/B9A24738-FA19-4A54-8CE5-813B48E6871E/iCockpit-Client.app> (loaded)' with name 'LabledTextFieldCell.xib''
我反复检查,一切似乎都井井有条。该文件存在于 Xcode 中以及文件系统中,并且在代码中以正确的名称引用。
这是发生崩溃的代码行:
[[NSBundle mainBundle] loadNibNamed:MyIdentifier owner:self options:nil];
在更大的背景下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
int curRow = indexPath.row;
int i = 0;
if (indexPath.section > 0)
while (i < indexPath.section)
curRow = curRow + [self sectionSize:i];
i++;
UITableViewCell *cellRet;
if (indexPath.section == 1)
// code
else if (indexPath.section == 2)
// ...
else if (indexPath.section == 3)
static NSString *MyIdentifier = @"LabledSwitchCell";
NSLog(@"Creating cell: %@", MyIdentifier);
cellRet = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cellRet == nil)
// CRASHES
// -------
[[NSBundle mainBundle] loadNibNamed:MyIdentifier owner:self options:nil];
// -------
cellRet = self.cell;
self.cell = nil;
// more code...
可能值得注意的是:nib 最初是通过 File -> New -> New File...、Cocoa Touch -> UIViewController 子类添加的,它提供了三个文件 - MyClassViewController.m、MyClassViewController.h 和 MyClassViewController.xib .我已将 MyClassViewController.xib(在我的实际情况中为 LabledTextfieldViewController.xib)重命名为 MyClassView.xib (LabledTextfieldView.xib),这对我来说似乎更合乎逻辑。
如上所述,该应用在模拟器中运行良好,问题仅出现在实际设备上。
我的 Xcode 版本是最新的 Xcode 4.1 (Build 4B110)。
提前致谢。非常感谢任何帮助!
【问题讨论】:
【参考方案1】:检查您的 NIB 文件名的拼写,尤其是大写和小写。
我相信模拟器文件系统不区分大小写,但实际设备是。
【讨论】:
天哪,你是对的!我没有太大希望,但是由于您的回答,我再次检查了大小写的差异,实际上,笔尖文件的名称是LabledTextfieldCell,我将其引用为LabledTextFieldCell。该文件的初始实现来自我的同事,我从未注意到他的不同命名约定。非常感谢,这可能为我节省了更多的调试时间。 :-)以上是关于iPad应用程序仅在设备上而不是在模拟器中加载笔尖时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
我的应用在 iPad 模拟器上运行良好,但在 iPad(iOS 8.4)上崩溃,xcode 说无法在捆绑中加载 NIB
AngularJS Node 应用程序下载而不是在 Internet Explorer 中加载