对于自定义单元格,UITableView错误“无法在bundle中加载NIB:”

时间:2013-02-07 13:01:51

标签: iphone ios uitableview

当我尝试使用以下自定义单元格编码时,显示错误。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpletablcellCell";
    SimpletablcellCell *cell = (SimpletablcellCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpletablcellCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    cell.nameLabel.text = [ar objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[ar1 objectAtIndex:indexPath.row]];
    cell.prepTimeLabel.text = [ar objectAtIndex:indexPath.row];

    return cell;
}

错误消息

'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications/FE02B3A1-C40C-4FAC-BBA6-B245350F3754/SImpleTab.app> (loaded)' with name 'SimpletablcellCell''
 *** First throw call stack:
(0x1c8f012 0x10cce7e 0x1c8edeb 0x22ffac 0x23198d 0x3418 0xcef4b 0xcf01f 0xb780b 0xc819b 0x6492d 0x10e06b0 0x228bfc0 0x228033c 0x228beaf 0x1038cd 0x4c1a6 0x4acbf 0x4abd9 0x49e34 0x49c6e 0x4aa29 0x4d922 0xf7fec 0x44bc4 0x44dbf 0x44f55 0x4df67 0x2d40 0x117b7 0x11da7 0x12fab 0x24315 0x2524b 0x16cf8 0x1beadf9 0x1beaad0 0x1c04bf5 0x1c04962 0x1c35bb6 0x1c34f44 0x1c34e1b 0x127da 0x1465c 0x29fd 0x2925)
libc++abi.dylib: terminate called throwing an exception

请检查此代码有什么问题?

5 个答案:

答案 0 :(得分:13)

名为SimpletablcellCell的项目中是否存在.nib / .xib?您的姓名可能有拼写错误,请仔细检查。

确保该文件是目标的一部分。您可以通过打开Xcode中的右侧菜单来检查这一点。例如:

file target settings

如果单元存在,是否在构建过程中被复制?检查项目目标构建设置中的“复制包资源”阶段,并确保正在复制它。如果没有,请手动将文件添加到此阶段。

答案 1 :(得分:7)

当我将Cocoapods用于我的私人pod库时,我遇到了这个问题。

我错误地将我的xib文件包含在s.source_files中,如此

s.source_files =  'MyLibrary/**/*.{h,m,xib}' //DOES NOT WORK

解决方案是使用资源属性:

s.resources = 'MyLibrary/**/*.{xib}'        //PROBLEM SOLVED
s.source_files =  'MyLibrary/**/*.{h,m}'

...

如果你的podspec正在寻找上面的s.resources指定的xib,但是xib不在那个路径中,那就会出现问题。

一旦我错误地将xib添加到我的根项目目录(你的AppDelegate所在的位置),所以Cocoapods不会将它复制到任何使用pod的客户端。

我通过更改s.resources路径或移动xib来修复它,使其位于s.resources路径中。

答案 2 :(得分:1)

在XCode外部重命名某些文件时,可能会发生此错误。要解决它,您只需从项目中删除文件(右键单击 - 删除和“删除参考”)您重新导入项目中的文件,一切都会好的!

答案 3 :(得分:1)

如果您使用以下方式注册笔尖:

let nib: UINib = UINib(nibName: "myNib", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "myCell")

确保在viewDidLoad()功能中完成。我把它放在init()函数中并收到了这个错误。移至viewDidLoad()后,效果很好。

答案 4 :(得分:0)

  1. 确保将自定义单元添加到正在构建的目标中。毫无疑问地注册该单元格。
  2. xib中应该没有IBOutlet错误。另外,将视图连接到文件所有者。
  3. 常见错误可能是您正在加载的笔尖名称不正确。