dequeueReusableCellWithIdentifier错误

时间:2013-08-05 10:51:43

标签: objective-c storyboard

我正在使用此方法在故事板中返回已创建的单元格  “dequeueReusableCellWithIdentifier” 这是代码

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

    switch ( indexPath.row )
    {
        case 0:
            CellIdentifier = @"map";
            break;

        case 1:
            CellIdentifier = @"blue";
            break;

        case 2:
            CellIdentifier = @"red";
            break;
    }

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier     forIndexPath: indexPath];


    return cell;
}

但我有这个错误: 'NSInternalInconsistencyException',原因:'无法使用标识符映射使单元格出列 - 必须为标识符注册一个nib或类或在故事板中连接原型单元'

注意:我在故事板中添加了标识符,因为它在这里并且无法正常工作,另一个重要的事情是:这个项目正在运行,但现在它停止了!我从appcoda.com下载它

1 个答案:

答案 0 :(得分:1)

这里Apple doc说的是:

  

重要事项:在调用此方法之前,必须使用registerNib:forCellReuseIdentifier:或registerClass:forCellReuseIdentifier:方法注册类或nib文件。

...

  

在将任何单元格取消之前,请调用此方法或registerNib:forCellReuseIdentifier:方法来告诉表格视图如何创建新单元格。如果指定类型的单元当前不在重用队列中,则表视图使用提供的信息自动创建新的单元对象。

     

如果您以前使用相同的重用标识符注册了类或nib文件,则在cellClass参数中指定的类将替换旧条目。如果要从指定的重用标识符中取消注册该类,则可以为cellClass指定nil。

所以你应该像这样注册你的课程:

- (void) viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"map"];
}