iPad应用程序仅在不在模拟器中的设备上加载nib时崩溃

时间:2011-08-03 19:07:32

标签: objective-c xcode ipad xib nib

我知道之前已经问过这个问题,我花了很多时间跟踪各个主题的建议,不仅仅是在这个网站上,而是无济于事。

我正在为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...
}

值得注意的是:笔尖最初是通过文件添加的 - &gt;新 - &gt;新文件...,Cocoa Touch - &gt; UIViewController子类提供了三个文件 - MyClassViewController.m,MyClassViewController.h和MyClassViewController.xib。我已将MyClassViewController.xib(在我的实际案例中为LabledTextfieldViewController.xib)重命名为MyClassView.xib(LabledTextfieldView.xib),这对我来说更合乎逻辑。

如上所述,应用程序在模拟器中工作正常,问题只发生在实际设备上。

我的Xcode版本是最新的Xcode 4.1(Build 4B110)。

提前致谢。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:6)

检查您的NIB文件名的拼写,特别是大写与小写。

我认为模拟器文件系统不区分大小写,但实际设备是。