7

私は現在、ストーリーボードを使用してUITableView、同じウィンドウ内に 2 つの を含むアプリを作成しています。

アプリケーションを実行すると、最初UITableViewに多数の「登録番号」が入力されます。

ユーザーがセルをタップすると、2 番目のセルにはUITableView、選択したセルに関する詳細が入力されます。

最初のテーブルで数字をタップすると、次のことを実行するメソッドがあります。

[mySecondTableView reloadData]

それは何をしますか。reloadDataコマンドを呼び出すときに、両方を呼び出す必要があるという印象を受けています。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

最初は発火しますが、2番目は発火しません。データ ソースとデリゲートの両方を自分自身に配線しています。

何が欠けているのかわかりません。

両方のメソッドは起動することを意図していますか?

4

8 に答える 8

19

reloadData の後、これを試してください。

NSIndexSet * sections = [NSIndexSet indexSetWithIndex:0];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationNone];

データの変更が微妙な場合、テーブル ビューは更新の必要性を最適化するように見えることがわかりました。

于 2013-08-15T04:07:24.920 に答える
3

指摘された回答は、テーブル ビューの問題を解決しません。まだ呼んでいた

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

ただし、セル描画メソッドは起動されませんでした:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

私の問題は、(もちろん私の間違いのために)テーブルビューの高さが0だったことです。したがって、テーブルには表示されているセルのみが表示されるため、セルを表示しようとはしません。高さの値を変更すると、セルメソッドの描画が再び開始されました。

結論として、テーブル フレームを再確認し、幅と高さの値がゼロでないことを確認してください。

于 2014-06-19T10:55:05.310 に答える
1

cellForRowAtIndexPath が呼び出されない別の原因が見つかりました。

numberOfRowsInSection0 を返す場合、cellForRowAtIndexPath呼び出されません。これは私の場合、ビュー コントローラーの変更中に NSArray の割り当てが解除され、その結果のカウント (nil だったため) が 0 を返すために発生しました。

于 2014-10-01T17:33:17.130 に答える
1

必ず、waitUntilDone:NO を指定して performSelectorOnMainThread を呼び出してください。そうしないと、同じ問題が引き続き発生する可能性があります

于 2014-03-17T18:33:24.573 に答える
1

この同じ問題が発生しました。を使用しperformSelectorOnMainThreadてメソッドを呼び出し、次に を呼び出しますreloadData。これは、hatfinch の提案に従ってメイン スレッドの外部で更新しようとしていたため、必要でした。

于 2014-02-23T23:09:53.507 に答える
0

何日も頭を壁にぶつけた後、これで問題が解決しました。

All Exceptions ブレークポイントを設定し、データソースで範囲外の例外が発生しているかどうかを確認します。ブレークポイントを設定しないと、クラッシュは発生せず、テーブルビューは単にリロードに失敗します。

完全な回答はこちら

于 2015-08-20T17:21:06.393 に答える