2011-12-21 9 views
0

私のアプリケーションでは、NSMutableArrayの値でテーブルビューを埋めています。この可変配列は別のviewcontrollerに追加されているので、データをリロードする必要があります。xcodeはテーブルビューをリロードする

これはおそらく非常に簡単な質問ですが、私は15以上の投稿を読んでいますが、いずれもxcode 4.2には対応していないようですが、どこに[self.tableView reloadData]を置くのか正確には分かりません。この方法はどこに置かれるべきですか?私がテーブルビューのソースコードのさまざまな場所に配置しようとすると、テーブルビューは最初に値が設定されていない状態で初期化されました。

他のviewcontrollersコードに配置する必要があります。その場合、使用しているUItableviewサブクラスの特定のインスタンスをどのように参照できますか?

ありがとうございます。

答えて

2

Xcode 4.2には特別な変更はありませんので、他のソースに注意する必要がありますたとえそれらが他のバージョンのXcodeを参照していても見つかりました。

正確には[self.tableView reloadData]である必要はありません。テーブルビューオブジェクトをreloadDataメッセージで送信します。そのテーブルビューオブジェクトにアクセスする方法 - 自己のプロパティ、インスタンス変数、別のクラスのプロパティなど - はあなた次第です。

すでにtableViewプロパティが設定されている場合、別のビューコントローラからデータをリロードする最も簡単な方法は、テーブルビューオブジェクトにreloadDataメッセージを直接送信することです。したがって、例えばViewControllerFooのメソッドがに接続されていて、テーブルビューをリロードする必要があることがわかっている場合は[bar.tableView reloadData]を呼び出すことができます。

プロパティを設定していない場合は、自分で作成するか、他のビューコントローラに代わってテーブルビューを保持するビューコントローラにreloadDataメソッドを作成することができます。

しかし、これらのアプローチでは論理とプレゼンテーションが混在していますが、これは通常は非常に貧弱なアーキテクチャです。あるビューコントローラが他のビューコントローラがそのビューを更新する必要があることを知っている場合、特定のビューコントローラとは独立した第3のクラスにそのロジックの一部を組み込む必要があります。その3番目のクラスは通知を送信できます。または、View ControllerはKVO経由で状態の変更をリスンすることができます。

0

[tableView reloadData]を実行した後。あなたの[のtableView reloadData]はあなたがそこに誤った値を読み取る必要があります

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

を確認した後、あなたのテーブル

をクリアした場合

のtableViewは、テーブルの内容

を取得する機能をリロードし、デリゲートます

+0

ご回答ありがとうございます。しかし、リロードメソッドをコードのどこに配置するかはまだ不明です。私はそれを[viewDidLoad]に入れると、私のtableviewはあなたが言及した2つの方法を完全にバイパスしているように見えました。 – user1110415

+0

テーブルビューの 'delegate'と' dataSource'プロパティは正しく設定されていますか? –

0

ナビゲーションコントローラを使用していますか?テーブルビューの上にプッシュされた配列データを読み込むビューコントローラですか?そうであれば、ナビゲーションコントローラのサブビューがポップオフされ、テーブルビューが再び表示されたときに呼び出されるので、reloadData呼び出しをviewwillappearに入れます。

0

アレイが正しく実装されているかどうかを確認する必要があります。ビューに入力するときにログに記録してください(たとえば、-viewWillAppearのメソッド)。

通常、メソッドには[self.tableView reloadData]を入れます。

0

通常は、dataSourceとして設定されたviewControllerの「viewDidLoad」メソッドでreloadDataを呼び出し、tableViewのデリゲートを呼び出します。しかし、それほど重要なことではありません。datamodel(NSMutableArray)を変更するたびに必ずreloadDataを呼び出すようにしてください。

あなたの説明から判断すると、reloadDataは問題の原因ではありません。 viewControllerをtableViewのdataSourceプロパティとして設定したことを確認してください。

また、あなたがやっているように、TableViewをサブクラス化するのではなく、ここで仮定したように、通常、データソースを使用します。

関連する問題