テーブルビューでのアクティビティインジケーター表示行データが取得されている間

StackOverflow https://stackoverflow.com/questions/2650525

質問

TableView1.RowからTableView2までナビゲートしています。負荷時間が約3秒であることを考えると、TableView1.rowが選択されるとすぐに、ナビゲーションをTableView2にスライドさせ、次にデータが取得され、その基礎となるテーブルビューでレンダリングされている間にテーブルビュー2の上にuiactivityindicatorViewを表示する必要があります。注意、TableView2は実際には親のuiviewのサブビューです(親がuitableviewであるのではなく)。

私はこの投稿を見ました: uitableview1からuitableview2にナビゲートするときは、アクティビティインジケーターを表示する必要があります

...アクティビティインジケーターの開始を追加し、データを停止するように指示を提供し、TableView2のviewDidloadにfetch fetter force fortが表示されます。

Thine View2が目に見えて視界にスライドする前に、ViewDidloadが実行されて完了すると、上記のソリューションがどのように機能するかはわかりません。

それとは別に、IBのTableView2にアクティビティインジケーターを追加しようとし、Iboutlet Indicatorの開始/停止コードをViewDidapearに追加しました。何が起こるかは、データフェッチが実行され、インジケーターが回転するのを見ることができますが、フェッチの終わりにはテーブルビューが空です。 cell rowaratindexpathなどがすでに解雇されているため、viewdidappearはテーブルビューにデータを追加するには遅すぎるようです。

誰かを提案してもらえますか?私はここで明らかな何かを見逃すことができました(私がいる午前5時近くで、私の脳はむち打ちだと思います)。 viewdidapearからcellforrowatindexpathなどを再トリガーする必要がありますか?私のテーブルビューがサブビューであり、親ビューではないという問題はありますか?

ありがとう

役に立ちましたか?

解決

私は自分の質問をもう一度見ましたが、答えは実際にはかなり簡単です。通常、非常に集中的な処理はメインスレッドで実行されないでください。私は同じスレッド上のアクティビティインジケーターのデータ集中的なフェッチとUIディスプレイを実行しようとしていたので、これらは次々と順番に処理されていました。

解決策は、新しいビューコントローラーを入力し、a)メインスレッドのアクティビティインジケーターアニメーションをキックオフし、b)別のスレッドでデータ集中フェッチを実行することです(performselectorinbackgroundを使用)。 UI関連の更新は、バックグラウンドスレッドから適用できません。これらはメインスレッドに引き戻す必要があります。

すでにこれに関するそのような投稿がたくさんあります(例 ここ)、最初からこれらを拾わないことに対する私の悪い:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top