1

我确信这个问题有一个足够简单的答案,但我似乎找不到它。我的代码中有以下代码UITableViewController

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell==nil)
    {
        NSLog(@"Cell is nil!");
    }

    return cell;
}

但是在我的日志输出中我得到

细胞为零!

紧接着

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' * First throw call stack: (0x1b68d72 0x135fe51 0x1b68bd8 0xb0e315 0xcb373 0x63578 0xcb1d3 0xcff19 0xcffcf 0xb9384 0xc952e 0x691bc 0x13736be 0x215c3b6 0x2150748 0x215055c 0x20ce7c4 0x20cf92f 0x2171DA2 0x1B4B4 0x1BE63 0x2C2BE 0x2CF9F 0x1F3F3FDDDDDDD DD 0X1AC5F39 0X1AC5C5C5C5C10 0X1ADEDA5 0X1ADEB12B12 0X1B12 0X1B0FB46抛出0x1b0eed4 expriatity 40x1B0B0B0B0B0B211B211B211B211B28FIL / 0X11B28FIL / 0X11B28FIL / 0X11B28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.28F.211B28F.

有谁知道为什么会发生这种情况,更重要的是,如何解决它?

提前致谢。

4

4 回答 4

3

如果它为零,则必须创建单元格,因为方法

[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

从表视图缓存中返回未使用的单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:NSIndexPath*)indexPath
{
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil)
   {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }

   //configure cell

   return cell;
}
于 2012-06-20T01:27:23.347 回答
0

你用interface builder这个班吗?如果是这样,不要忘记从表格视图中进行引用。我有同样的零问题,这就是我的情况。

于 2012-06-20T04:50:49.103 回答
0

dequeueReusableCellWithIdentifier如果存在可以重用的标识符,则返回具有您传入的标识符的已创建单元格。

如果没有,您有责任创建一个。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCustomCellID];
if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                   reuseIdentifier:kCustomCellID] autorelease];
}
于 2012-06-20T01:27:30.980 回答
0

是的,该方法UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];意味着它将重用已分配有 CellIdentifier 的单元格。但您尚未分配任何具有此标识符的单元格,对于 tableView,它将为屏幕分配一些单元格,然后它将重用单元格标识符,如果你这样做,你会发现它会起作用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell==nil)
    {
        NSLog(@"Cell is nil!");
        cell = [[[UITableViewCell alloc] initWithSyle:UITableViewCellStyleNormal reuseIdentifier:CellIdentifier] autorelease];
    }

    return cell;
}

参加考试。

于 2012-06-20T01:31:35.003 回答