0

サーバーから新しいデータを取得するときは、次のことを行う必要があります。

  1. UITableViewとの既存の行の既存のデータを更新する
  2. アニメーションで新しい行を挿入します。

問題は、ステップ 1[UITableView reloadData]がいつ終了するかわからないので、ステップ 2を開始できることです。

この状況にどう対処するか?

簡単にするためにステップ1を使用することを好み[UITableView reloadData]ますが、1つのロジックステップで両方のステップを達成する他のソリューションもクールです.

更新- 多分これは私の間違いです。

どうやら

-既存の行情報でデータモデルを更新

-reloadData

-新しい行情報でデータ モデルを更新します

-insertWorsAtIndexPaths

今すぐ正常に動作します。

ステップ 1 の後にメイン スレッドを強制的に更新する「醜い」方法をいくつか削除しましたが、今のところ、すべて問題ありません。

(「醜い方法は [NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0f] を呼び出すことでした。何らかの理由で、過去に動作させるために追加する必要があります)

不思議..今、すべてが本当に大丈夫なのか. 何か問題がある場合は更新します。お手数おかけして申し訳ありません:)

更新 2

これは私が今それを使用する方法であり、問​​題なく動作するようです:

-データモデルの既存の行を更新してから呼び出します

[UITableView reloadData];

-データモデルに新しい行を追加してから呼び出す

[UITableView beginUpdates]

[UITableView insertRowsAtIndexPath withRowAnimation]

[UITableView endUpdates]
4

2 に答える 2

0

reloadSections:withRowAnimation:アニメーションで行を更新するために使用できます。または、使用することもできます。reloadDataそれinsertRowsAtIndexPaths:withRowAnimation:は、データの取得方法によって異なります。

UITableView リファレンスを確認してください

于 2012-07-17T14:48:30.033 に答える
0

これはNSURLConnectionで行うことができます。

デリゲートを設定すると、応答があるときにこれらのメソッドが呼び出されます。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

これらのメソッドでは、データをテーブルビューに追加して、

[UITableView reloadData];
于 2012-07-17T14:02:18.137 に答える