0

UITableViewController私は、最初は単一の行を持つ単一のセクションを持つアプリを持っています(その中に「読み込み中...」と表示されています)。インターネットからいくつかのデータを取得し、その時点で次の呼び出しを行います。

[tableView reloadSections:[NSIndexPath indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

これが必要なのは、データをフェッチした後、最初にあった 1 行だけではなく、多くの行が存在するためです (したがって、テーブル ビューに表示されているセルのリストを要求することはできません。これは、1 つの古いセルを返すだけだからです。 )

問題は、表示されている行だけでなく、すべての行cellForRowAtIndexPathに対してデリゲート メソッドを呼び出していることです。メソッドにいくつかのログを入れることで、それを確認しました。行をシンプルに切り替えると、スクロールして他の行が表示されるまで、最初の数行のみが呼び出されます。これは私の iOS4 iPod Touch と iOS5 シミュレーターで発生します。[tableView reloadData]cellForRowAtIndexPath

約 300 行ありますが、読み込みが非常に遅くなり、通常は iPod Touch でクラッシュします。

私が使用していない理由reloadDataは、新しい行の追加をアニメーション化するのに対しreloadData、それらを突然表示したいからです。

4

2 に答える 2

1

あなたはこれを行うことができます:

[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] 
                 withRowAnimation:UITableViewRowAnimationNone]; 
于 2012-04-24T15:37:46.020 に答える
0

これは、テーブルに行を追加するために使用しているものです。

NSMutableArray *indexPathsToInsert = [[NSMutableArray alloc] init];

    for (NSInteger i = previousTableDataCount; i < [tableData count]; i++) {
        [indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:0]];
    }

    // Apply the updates.
    [tableView beginUpdates];

    [tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationNone];
    [tableView endUpdates];

すべてのデータをリロードするのではなく、既存の tableView の下部に新しい行を挿入するだけです。tableData 配列はテーブルのデータソース配列であり、previousTableDataCount は、インターネットから新しいデータを挿入する前に tableData 配列が持っていた項目のインデックスです...

于 2012-04-24T16:37:32.107 に答える