4

UITableview に約 6000 ~ 8000 行をロードしたいと考えています。非同期呼び出しを使用してサーバーからデータを取得し、データを取得したら呼び出す

[tableView reloadData]

これは、テーブル ビューを更新するためのものです。しかし、何らかの理由でアプリが動かなくなってフリーズします。をデバッグすると、 cellforrowatindexpath が (メインスレッドで) 6000 回呼び出され、 dequeueReusableCellWithIdentifier が常に null を返すことがわかりました。

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath{
       CDTableRowCell *cell = nil;

        // Create and Resue Custom ViewCell
        static NSString *CellIdentifier = @"CellIdentifier";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        // got into render/theme objec 
        if(cell == nil){
            cell = [[CDTableRowCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }

// MODIFYING CELL PROPERTIES HERE FROM AN ARRAY
// NO HTTP CALLS 

}

また、スクロールを開始すると、テーブルビューはセルの再利用を開始しますが、その前に常に新しいセルを作成することはありません。この奇妙な動作の理由は何か?

4

2 に答える 2

0

質問のメソッドは、テーブル ビュー データソース メソッドではありません。datasource メソッドには、引数としてテーブル ビューがあります。あなたが書いたメソッドは、データソースから新しいセルを取得するのではなく、tableView 自体からセルを取得するために使用できるメソッドです。

そのメソッドが呼び出される頻度はわかりませんが、それをオーバーライドすることは、ほとんどの場合、やりたいことではありません。

uitableview を独自のデータソースにサブクラス化したと思いますか? その場合は、質問のコードを datasource methodtableView:cellForRowAtIndexPath:に含める必要があり、現在のようにメソッドをオーバーライドしないでください。

于 2012-09-01T07:26:56.497 に答える
0

このようにしてみて、

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

    static NSString *CellIdentifier =@"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

}

return cell;

}
于 2012-09-01T06:20:54.513 に答える