UITableView中的自定义单元格无法加载文件

时间:2014-05-31 22:16:00

标签: ios uitableview

我正在学习iOS,我正在使用UITableView进行练习。我已经为表行构建了自己的单元格,我想添加它但是如果条件有NIB指针我有问题。当应用程序到达此点时,它崩溃并且消息如下:

Could not load NIB in bundle: 'NSBundle </Users/myAccount/Library/Application Support/iPhone Simulator/7.1/Applications/90329AC3-7DAB-4F74-A147-103AE240A582/BetterApplication.app> (loaded)' with name 'Cell'

我不完全理解这个错误,而不是它无法加载此文件。怎么解决?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"Cell";

    SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
    //cell.prepTimeLabel.text = [prepTime objectAtIndex:indexPath.row];

    return cell;
}

enter image description here

2 个答案:

答案 0 :(得分:1)

使用NIB:

问题是您的nib未命名为Cell

您必须插入nib文件的名称

无论如何,鼓励你在viewDidLoad注册笔尖

[yourTable registerNib:[UINib nibWithNibName:@"YourCellNibName" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"Cell"];

我还建议您为您的Nib 文件使用重要名称。例如,使用MyCustomCell或更具体的名称,例如类SimpleTableCellTableViewCell的名称。

如果您使用此代码,最终代码将为:

static NSString *const simpleCellTableIdentifier = @"simpleCellTableIdentifier";

- (void)viewDidLoad {
    //Your stuff

    [yourTable registerNib:[UINib nibWithNibName:@"SimpleTableCellTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:simpleCellTableIdentifier];

    //Your staff
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleCellTableIdentifier];
    if (cell == nil)
    {
        cell = [[SimpleTableCellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleCellTableIdentifier]
    }

    cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];

    return cell;
}

使用故事板:

您只需确保在Cell中将Identifier设置为 storyboard ,然后写:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"Cell";

    SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];

    cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
    //cell.prepTimeLabel.text = [prepTime objectAtIndex:indexPath.row];

    return cell;
}

答案 1 :(得分:-1)

可能是因为您忘记注册一些可重复使用的单元类。

在使用单元格之前,请尝试将它们注册到您的表中,如下所示:

[tableView registerClass:[SimpleTableCellTableViewCell class] forCellReuseIdentifier:@"Cell"];

您可以在awakeForNib中或在创建表格后立即添加此调用。

我更喜欢注册具有相同名称的单元格,如下所示:

Class CellClass = [SimpleTableCellTableViewCell class]
[tableView registerClass:CellClass forCellReuseIdentifier:NSStringFromClass(CellClass)];

你可以像这样重用它:

Class CellClass = [SimpleTableCellTableViewCell class]
[table dequeueReusableCellWithIdentifier:NSStringFromClass(CellClass)]