dequeueReusableCellWithIdentifier:引发异常

时间:2014-12-13 14:09:24

标签: ios uitableview

我尝试了很多不同的方法在我的tableview中使用自定义单元格,但没有任何工作。我也尝试过使用UITableViewCell的子类,但它也没有用。

所以,我回到了一个更简单的解决方案。

我在TableView中有一个原型Cell - 它是具有标识符的Class UiTableViewCell:LocalPostsCell

我的代码是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

 UITableViewCell *cell = [self.postsTable dequeueReusableCellWithIdentifier:@"LocalPostsCell" ];

// ... blah blah get values for name/text variables


        UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];

        UILabel *descriptionLabel = (UILabel *)[cell viewWithTag:101];

        if (name == nil || [name isEqual:[NSNull null]]) {
            // handle the place not being available
            nameLabel.text= @"";
        } else {
            nameLabel.text = name;
        }

        if (text == nil || [text isEqual:[NSNull null]]) {
            // handle the place not being available
            descriptionLabel.text = @"";
        } else {
            descriptionLabel.text = text;
        }
return cell;
}

我也试过这个:

UITableViewCell *cell = [self.postsTable dequeueReusableCellWithIdentifier:@"LocalPostsCell" forIndexPath:indexPath];

除了(lldb) - 线程1 - 断点1.1错误外,所有这些都在此行失败并且控制台中没有打印任何内容。

我为所有例外添加了断点,并且我启用了Zombies。

2 个答案:

答案 0 :(得分:0)

您是否在Interface Builder中正确设置了正确的标识符字段(它应该是LocalPostsCell)?

另一种可能性是你使用的是另一张表。通常,使用协议方法中的tableView变量,而不是像self.postsTable那样的自己的引用。

您还应该阅读错误消息并查看问题所在。您可以通过按调试器中的继续按钮获得更多信息。

顺便说一句,你可以隐式检查nil,这样你就可以更加简洁。

nameLabel.text        = name ? name : @"";
descriptionLabel.text = text ? text : @"";

答案 1 :(得分:0)

您是否为Cel​​lId注册了nib?但是,您不是第一次分配任何内容,请执行以下操作:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LocalPostsCell" ];
if (cell == nil)
{
    cell = [[UITableViewCell alloc]init];
}
 // Other things...

return cell;