0

これを試しましたが、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;
4

1 に答える 1

0

2つの問題:

  1. あなたは決して戻りませんcell2。このメソッドの最後ではcell、送信者テーブルビューが最初のビューと2番目のビューのどちらであるかに関係なく、常にを返します。
  2. else2番目の部分(ブランチ)でdequeueReusableCellWithIdentifier:メッセージが返される場合は、最初の部分のようにセルを作成しませんnil

概して:

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
于 2012-08-01T08:02:43.513 に答える