2011-04-08 22 views
0

私は1つのUITableViewControllerクラスを持っています。私はテーブルのセルを埋めるためにNSMutableArrayを使用しています。私はデータベースからデータを取り出して、&を配列に追加しています。しかし、細胞は古い結果を示しています。どのようにしてreladDataメソッド&を使用すればいいですか?私のUITableViewControllerでこのメソッドをどこで呼び出すべきですか?tableView iphoneのreloadDataメソッドの使い方

答えて

4

それを使用しないようにするとき、私はAppleのドキュメントを引用:

それは完全に そのデータをリロードする テーブルビューを望んでいるとき、テーブルビューのデリゲートやデータ ソースは、このメソッドを呼び出します。 行を挿入または削除するメソッド、特に ブロックが beginUpdatesおよびendUpdatesの呼び出しで実装されているアニメーション内で呼び出されることは避けてください。

だから、のようなテーブルを変更するテーブルビューのメソッドを使用して、あなたのモデルを変更したときに、それを呼び出すことはありません:あなたはreloadDataメソッドを呼び出すたび

deleteRowsAtIndexPaths:withRowAnimation: 
deleteSections:withRowAnimation: 
insertRowsAtIndexPaths:withRowAnimation: 
insertSections:withRowAnimation: 
0

、テーブルビューが更新されます。データベースからデータをロードした後にテーブルをリフレッシュする場合は、フェッチが完了したらリロードデータを呼び出すことができます。

 
// code to fetch data from database 

// when done, reload the table 
[myTableView reloadData]; 
+0

を使用して、表のセルをリロードし、また他の貴重な情報については、ニック・ウィーバーの答えを見ることができます。 – taskinoor

1

あなたがリロードされるか、あなたは知っているとき、それはまだ描かれていないテーブルを強制したいときは、(とすべきである)reloadData:を呼び出すことができます。

多くの場合、表示コントローラーのviewDidLoad:メソッドまたはviewDidAppear:(またはさらにviewWillAppear:)でこれを行います。

これらの方法の外では、テーブルにデータを供給するために使用されているデータの配列の内容を実質的に変更する場合は、reloadData:に電話することをお勧めします。たとえば、それぞれに在庫レベルのある商品のリストがあるとします。最初のビューでは、配列内のすべてをテーブルに表示することができます。しかし、在庫がゼロの商品のみを表示するようにフィルタを適用したとします。製品のあるアレイは、それらの製品だけを含むように縮小されるので、アレイを縮小した後に、テーブル上でreloadData:と呼ぶと、ビューが更新されます。

ところで、私が最近発見したように、reloadData:を呼び出すと、テーブルは非同期で(かなり早く)リロードされます。ただし、メソッドdeleteRows...deleteSections...insertRows...、およびinsertSections...(特にとendUpdates:の呼び出しの間)は同期して実行され、大きなテーブルの場合、アプリケーションがかなり遅くなり、UIがフリーズする可能性があります。あなたの走行距離は変わるかもしれませんが、それはこれらの方法での私の経験でした。私は実際にdeleteSections...を使用して、reloadData:を使用するモデルに行った(とにかくすべてのセクションを削除していたため)。

3

あなたは

//fetch data from database.. and update array 

//reload table data asper new data 

[self.tableView reloadData]; 
関連する問題