0

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

これはおそらく非常に単純な質問ですが、15 件以上の投稿を読んだことがありますが、どれも xcode 4.2 に対応していないようで、[self.tableView reloadData] を正確にどこに配置すればよいでしょうか。このメソッドは正確にどこに配置する必要がありますか? テーブルビューのソースコードのいろいろなところに入れてみたところ、初めてテーブルビューが値なしで初期化されました。

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

よろしくお願いします。

4

5 に答える 5

2

Xcode 4.2 について特別なことは何もないので、他のバージョンの Xcode を参照している場合でも、見つけた他のソースに注意を払う必要があります。

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

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

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

ただし、これらのアプローチはロジックとプレゼンテーションを混同しており、通常はかなり貧弱なアーキテクチャです。1 つのビュー コントローラーが別のビュー コントローラーがそのビューを更新する必要があることを認識している場合、そのロジックの一部を特定のビュー コントローラーから独立した 3 番目のクラスに分解する必要があります。その 3 番目のクラスは通知を送信したり、View Controller が KVO を介して状態の変更をリッスンしたりできます。

于 2011-12-21T19:33:38.410 に答える
0

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

于 2011-12-21T19:52:00.383 に答える
0

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

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

于 2011-12-21T20:30:42.237 に答える
0

[tableView reloadData]を実行した後;

tableView は、テーブルのコンテンツを取得するために関数をリロードしてデリゲートします

[tableView reloadData] テーブルをクリアした場合

次に、

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

そこで間違った値を読む必要があります

于 2011-12-21T18:57:15.137 に答える
0

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

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

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

于 2011-12-21T21:10:01.857 に答える