0

複数の行を表示する UITableView を作成しようとしてきました (今のところ、より具体的には 2 つです)。問題は、XIB ファイルからこれらの 2 つのカスタム セルをロードする必要があることです。私はすでに2つのUITableViewCellを作成しましたが、それを機能させようとするとアプリがクラッシュするだけです(SIGARBRT)。それは以下のコードの間違いだとしか思えません:

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

    static NSString *CellIdentifier1 = @"ACell";
    ACell *cell1 = (ACell *)[userSettingsTableView dequeueReusableCellWithIdentifier:CellIdentifier1];

    static NSString *CellIdentifier2 = @"BCe;;";
    BCell *cell2 = (BCell *)[userSettingsTableView dequeueReusableCellWithIdentifier:CellIdentifier2];

    if([indexPath row] == 0) return cell1;
    if([indexPath row] == 1) return cell2;
    return nil;

    return cell1;
}

エラーメッセージ:

2012-05-05 18:21:49.256 StrangeThings[4388:f803] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061
2012-05-05 18:21:49.258 StrangeThings[4388:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
*** First throw call stack:
(0x13cf022 0x1560cd6 0x1377a48 0x9b02cb 0xb3d28 0xb43ce 0x9fcbd 0xae6f1 0x57d42 0x13d0e42 0x1d87679 0x1d91579 0x1d164f7 0x1d183f6 0x1da5160 0x29f30 0x13a399e 0x133a640 0x13064c6 0x1305d84 0x1305c9b 0x12b87d8 0x12b888a 0x19626 0x1af2 0x1a65 0x1)
terminate called throwing an exception(lldb) 
4

1 に答える 1

1

最初に、セル識別子を変更します。クラスとして名前を付けないでください。先頭に小文字の cellA、cellB などを使用し、特殊文字を避けてください。

2 つ目は、セルにメモリを割り当てていないことです。テーブル ビューが再利用するキューにセルがない場合、セルは返されません。次を使用します。

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

    static NSString *CellIdentifier1 = @"cellA";
    ACell *cell1 = (ACell *)[userSettingsTableView dequeueReusableCellWithIdentifier:CellIdentifier1];
if (cell1== nil) cell1 = [ACell alloc] init.........// your ACell class initlizer
    static NSString *CellIdentifier2 = @"cellB";
    BCell *cell2 = (BCell *)[userSettingsTableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if(cell2== nil) cell2 = [BCell alloc] init.........// BCell initializer
    if([indexPath row] == 0) return cell1;
    if([indexPath row] == 1) return cell2;
    return nil;

    return cell1;
}
于 2012-05-05T21:46:51.370 に答える