0

デバイスのアドレスブックを処理するテーブルがあります。そのテーブルには、500 以上の連絡先を簡単に含めることができます。さらに、テーブルは 3 秒ごとに更新され、コードを実行します

[tableContacts beginUpdates];
[tableContacts reloadRowsAtIndexPaths:arr withRowAnimation:UITableViewRowAnimationNone];
[tableContacts endUpdates];

更新のたびに、セルのテキストと 1 つの画像 (プレゼンス) を更新します。セルのすべての計算は、バックグラウンド スレッドのハンドルです。問題は、ほとんどの場合、スクロールが十分にスムーズでないことです。テーブルに触れてスクロールを開始すると、スクロールが1秒ほど応答しません(今回はテーブルが更新されているためだと思います)。

問題は、短時間でデータを取得し、更新する必要がある非常に長いテーブルを処理する方法です。

4

1 に答える 1

0

簡単な方法と正しい方法がありますが、とにかく、行をリロードしないでください。を介してセルを取得し[self.tableView cellForRowAtIndexPath:]、そのプロパティを変更します。これが最初です。次に、テーブルの強制更新について何かを行います。

テーブルの実際のデータソースは何ですか?それNSFetchedResultsControllerですか?それはコントローラー内にありNSArrayますか?いずれの場合も、新しいデータを持つセルのみを更新する必要があります。CoreDataを使用する場合は、NSFetchedResultsControllerDelegateメソッドを使用してください。NSArrayKVOをお勧めします-配列内の変更されたオブジェクトを監視します。

于 2012-06-03T14:13:36.397 に答える