uiviewcontroller中的多个tableview

时间:2012-08-01 07:54:46

标签: ios uitableview

我试过这个,但在cellforrowatindexpath

中出现异常错误

以下是我得到的例外情况。

断言失败 - [UITableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim / UIKit-1914.84

if(aTableView==specTable)
{
    static NSString *CellIdentifier = @"cell";
    UITableViewCell *cell = [specTable dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell==nil)
    {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2
                                    reuseIdentifier:CellIdentifier];

    }

    return cell;

} 
else 
{    
    static NSString *CellIdentifier2 = @"cell2";
    UITableViewCell *cell= [table2     dequeueReusableCellWithIdentifier:ReviewCellIdentifier2];
}

return cell;

1 个答案:

答案 0 :(得分:0)

两个问题:

  1. 您永远不会返回cell2。在此方法结束时,无论发件人表视图是否等于第一个或第二个,都始终返回cell
  2. 如果在第二部分(else分支)dequeueReusableCellWithIdentifier:消息返回nil,则不会像在第一部分中那样创建单元格。
  3. 总而言之:

    if (aTableView == specTable)
    {
        static NSString *cellIdentifier = @"cell";
        UITableViewCell *cell = [specTable dequeueReusableCellWithIdentifier:cellIdentifier];
        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2
                                        reuseIdentifier:CellIdentifier] autorelease]; // you were also leaking memory here
    
        }
    
        return cell;
    
    } 
    else 
    {    
        static NSString *cellIdentifier2 = @"cell2";
        UITableViewCell *cell2 = [table2 dequeueReusableCellWithIdentifier:cellIdentifier2];
        if (cell2 == nil)
        {
            cell2 = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2
                                        reuseIdentifier:CellIdentifier] autorelease];
    
        }
        return cell2;
    }
    
    return nil; // just to make the compiler happy