問題タブ [reloaddata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
621 参照

iphone - iPhone : UITableView reloadData タイミングの問題

一般的な TableView データの再読み込みの問題が発生しています。私は同じ主題に関する多くの質問を読みましたが、問題は私のものとまったく同じではありませんでした...

ナビゲーションベースのアプリケーションがあります。RootViewController の viewDidLoad メソッドで、JSON データ (記事) を取得するためにリクエストを行います。接続の読み込みが完了したら、エントリごとにカスタム Article オブジェクトを作成します。Article クラスには initWithDictionnary メソッドがあり、オブジェクトの属性を初期化し、最も重要なこととして、画像をダウンロードするリクエストを作成します。接続の読み込みが完了したら、記事オブジェクトの画像属性を設定します。目標は、ダウンロードした画像で cell.imageView.image プロパティを初期化することです。その時点で、問題が何であるかを推測したかもしれません。セル画像がレンダリングされた後に画像がダウンロードされるため、セルがリロードされるまで空のままになります (たとえば、画面から出てから戻る場合)。特定の時間に reloadData を呼び出す必要があると思いますが、呼び出しません いつかわからない。理想的には、すべてのセルがロードされたときにそれを呼び出しますが、それは可能ではないようです。セルがロードされるのを待ったり、前のセルをリロードしようとしたりするなど、クレイジーなことをたくさん試しましたが、うまくいきませんでした。ここの Q&A を読んで、Apple の LazyTableImage サンプル コードについて学びましたが、すべてを理解しているわけではないので、使用すべき/使用できるかどうかはわかりません。

詳細が必要な場合はお尋ねください。

助けてくれてありがとう。

0 投票する
1 に答える
1460 参照

objective-c - reloadData同期の問題

これが私の問題です。私のアプリのホームページには、最大3つのセクションを保持できるシンプルなUITableViewがあり、2つのセクションにはそれぞれ最大3つのアイテムがあり、3番目のセクションには最大6つのアイテムを保持できます。

各セクションには、に関連付けられたヘッダーがあります。

実際のコンテンツはWebからのものであり、リクエストを行い、サーバーがデータを送信し、NSXMLParserで応答を解析し、各セクションのデータを保持する配列(3つの配列)を作成し、セクションの参照を保持する別の配列を作成します。表示する必要があります。

次に、最後に[myTableView reloadData]を呼び出してコンテンツを更新し、テーブルを再描画します。ユーザーは、コンテンツを自分で更新することもできます。そのために、Facebookアプリと同じようにプルトゥリフレッシュメカニズムを使用しています。

pull-to-refreshを使用してコンテンツを更新すると、[myTableViewreloadData]も呼び出されます。コンテンツを更新すると、厄介なクラッシュが発生し、テーブルのレイアウトを変更する必要があります(たとえば、テーブルには現在3つのセクションがすべて保持されており、reloadDataを実行すると、1つのセクションのみが表示されます)。

デバッガーを使用して問題を追跡しました。これが私が見つけたものです:

  1. ユーザーがテーブル全体を50ピクセル程度プルダウンしてから、離します
  2. テーブルを「上」にして、「読み込み中」メッセージとテーブルの上部にアニメーション化されたUIActivityIndi​​catorViewを表示する320x50ビューに対応するアニメーションが開始されます
  3. 更新がトリガーされ、バックグラウンドタスクで新しいWebサービスリクエストを作成し、新しいデータを取得し、配列を解析して更新し、最後にメインスレッドでreloadDataを実行します
  4. その間、更新がすべてを実行している間、UITableViewはまだデリゲートメッセージを次の宛先に送信することに気づきました。
    • tableView:viewForHeaderInSection:
    • tableView:cellForRowAtIndexPath:

これは、テーブルを「移動」して新しいセル/ヘッダーを表示するプルトゥリフレッシュアニメーションが原因で発生すると思います。したがって、上記を呼び出します。

問題は、セクションのデータを保持する配列とセクション配列自体が同時に変更されるため、これがひどいクラッシュを引き起こすことです。

これが発生した場合、デリゲートメソッドは、間違ったコンテキストでアイテム/セクションの更新/まだ更新されていない配列を使用している可能性があります。つまり、前に

  • numberOfSectionsInTableView:
  • tableView:numberOfRowsInSection:

更新されたアレイの新しい構造を適切に更新する機会があります。

コードサンプルのない長い話であることは知っていますが、問題をすでに知っていて(少なくとも私が知っていることを願っています)、誰かが私のポイントを見た場合、誰かがこの同期の問題を修正するために正しい方向に私を向けることができるかもしれないと考えました。

読んでくれてありがとう!

後で編集

問題がどこにあるかを見つけました。私のpull-to-refreshメカニズムは、次のようなstopLoadingコールバックを使用します。

{isLoading = NO;

}

ある時点で、テーブルのcontentInsetをリセットし、UIEdgeInsetsZeroに設定しました。これと、バックグラウンドリフレッシュがメインスレッドに戻った後、reloadDataの前にstopLoadingを呼び出していたという事実は、間違った瞬間に間違ったデリゲートコールバックをトリガーしました。

したがって、テーブルのcontentInsetへの変更とreloadDataの間のタイミングの問題でした。

0 投票する
1 に答える
2136 参照

ios - [tableView reloadData]; ルートコントローラーに戻るまでリロードしません

友人と一緒に買い物リスト アプリを開発していて、[tableView reloadData]; で問題が発生しています。食料品のリストを plists に保存し、アイテムの追加サブビューを持っています。そのサブビューを離れてリストに戻ると、plist を更新して viewWillAppear で reloadData を呼び出しているにもかかわらず、リストに新しい項目が含まれていません。ただし、機能します。すべてのリストのマスター リストに戻り、アイテムを追加したばかりの特定のリストに戻ると、アイテムが表示されます。同様に、行を選択して項目の横にチェックマークを表示するだけで、リストから項目を削除したいと考えています。didSelectRowAtIndexPath で reloadData を呼び出しても、行が選択されてもリストは自動的に更新されません。また、マスター リストに戻ってから個別リストに戻ると、変更が表示されます。確認したところ、nib ファイルのデリゲートとデータソースがファイルの所有者に正しくリンクされています。

viewWillAppear のコードは次のとおりです。

および didSelectRowAtIndexPath:

どんな助けでも大歓迎です!前もって感謝します!

0 投票する
2 に答える
1688 参照

iphone - tableViewをリロードするためにカスタムUITableViewCellからアクションを呼び出す方法

単純な問題があります。.m"[tableView reloadData]"のaから呼び出すことができません。UIButtonUITableViewCell

各行にを含むtableViewを示すがあります。セルのボタンをクリックすると、tableViewからデータをリロードしたいと思います。UITableViewCellUIButton

0 投票する
1 に答える
1695 参照

iphone - データをリロードすると tableView がクラッシュする

メソッドgetDataを呼び出した後。データをリロードしようとしましたが、データがリロードされませんでした。理由はわかりませんが、正しくデータを取得できます。ああ、前のビューからこのビューをすばやく取得したいので、getData を viewDidAppear に設定すると、ユーザーには読み込み中のビューが表示され、データを完全に読み込むと、読み込み中のビューが消えてテーブルビューが表示されます

これが私の簡単なコードです

.m

.h

私はすでに参照をリンクしています。出口。

main.m でクラッシュすると言われました。新しいデータにセルを設定するにはどうすればよいですか。

ごめんなさい。EXE-BAD-ACCESS エラーが表示されるだけです

0 投票する
2 に答える
376 参照

iphone - iPhone アプリでのログイン後の reloadData

mainAppのviewDidLoadで開始されるログインがあります。これは、mainAppのnumberOfRowsInSectionがログインの前に実行され、テーブルビューが作成されないことを意味します。

私はJsonArrayをmainAppのviewWillAppearに持っており、ログイン後にnumberOfRowsInSectionも実行するreloadData関数を持っています。だから私は入れます:

...ビューに表示されます。しかし、これはログイン後に実行されません。

助言がありますか?

前もって感謝します。

コードの更新

ログインページ

メインビュー

0 投票する
2 に答える
370 参照

objective-c - UITableViewをリロードしてもiOSAccessoryDe​​tail画像が更新されない

UITableViewをロードしているときは、5つのセルが含まれることもあれば、4つのセルが含まれることもあります。セルの数に応じて、行2または行3のいずれかにAccessoryDe​​tailボタンを設定します。試してみたので条件が機能することはわかっていますdidSelectRowAtIndexPath:が、何らかの理由でTableViewが更新されていないようです。表示される行数によって異なります。でTableViewデータを正常にリロードしていますviewWillAppear:が、AccessoryDe​​tail[tableView reloadData]の問題は処理されません。私は[tableView reloadInputViews]無駄に使用しようとしました。問題は、AccessoryDe​​tail画像が、アプリケーションからロードを開始するビューに応じて、常に行2または行3のいずれかに設定されることです。

cellForRowAtIndexPath:メソッドのロジックは次のとおりです。

編集:Simon Leeの提案に従って、else句を使用してメソッドを次のように変更しましたが、どちらも機能しないようです:

0 投票する
1 に答える
1606 参照

xcode - Tableview reloadData が実行されていない -- 時々

2 つの異なる場所から呼び出されるビュー コントローラーがあります。

1) ルートコントローラーから呼び出します。表示され、入力されます。追加ボタンは完全に機能します。モーダル フォームを開き、情報を取得して、そのデリゲートを介してビュー コントローラーに返します。

ただし、別のビュー (分割ビューの右側) から呼び出すと、この同じコードはテーブルをリロードしません。データが追加されます-フォームを離れて戻ってきた場合、データはそこにありますが、テーブルビューは更新されていません。コードをステップ実行すると、行が取得されますが、それが表示されないように上に移動します。

0 投票する
1 に答える
196 参照

uitableview - UITable ビューがリロードされない

ビューベースのアプリに配置される UITableView があります。最初にデータを送信できるので、正しく配線されています。問題はテーブルをクリアすることです。NSMutableArray をクリアできますが、データは引き続きテーブルに表示されます。

インデックス パスの行のセルは次のとおりです。 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

0 投票する
2 に答える
1970 参照

cocoa-touch - viewWillAppear:animated で reloadData と deselectRowAtIndexPath を同時に呼び出せないのはなぜですか?

選択時にviewControllerをスタックにプッシュするセルを持つUITableViewがあります。子の viewController はユーザー入力を受け取り、スタックからポップします。

子のviewControllerがポップされたら、親のtableViewで選択したセルの値を更新し、行の選択を解除します。reloadData を使用してセルを更新でき、deselectRowAtIndexPath を使用して行を選択解除できますが、両方を同時に行うことはできません

これがなぜなのか理解しています.reloadDataはセルを暗黙的に選択解除し、deselectRowAtIndexPathはセルを明示的に選択解除しますが、同じリロード/選択解除動作を実現したい人が見つからないのは不思議です. ここで何が欠けていますか?

すべてのコードは viewWillAppear:animated にあります - deselectRowAtIndexPath を viewWillAppear に、reloadData を viewDidAppear に配置すると、近づくことができますが、これは私が望むものではありません。