166

viewDidLoadサブクラスに割り当てられるべきタスクのタイプとviewWillAppear: に割り当てられるべきタスクのタイプについて、私はいつも少し不明確でしたUIViewController

UIViewControllerたとえば、サブクラスがサーバーにヒットし、データを取得し、それをビューに供給してからそのビューを表示するアプリを実行しています。viewDidLoad対でこれを行うことの長所と短所は何viewWillAppearですか?

4

4 に答える 4

253

viewDidLoad は、一度行う必要があることです。viewWillAppear は、ビューが表示されるたびに呼び出されます。UILabel テキストの設定など、viewDidLoad で一度だけ行う必要があることを行う必要があります。ただし、ユーザーがビューを表示するたびに、ビューの特定の部分を変更したい場合があります。たとえば、iPod アプリケーションは、「再生中」ビューに移動するたびに歌詞をスクロールして一番上に戻します。

ただし、サーバーからロードする場合は、レイテンシーについても考慮する必要があります。すべてのネットワーク通信を viewDidLoad または viewWillAppear にパックすると、ユーザーがビューを表示する前にそれらが実行され、アプリが短時間フリーズする可能性があります。最初に、なんらかのアクティビティ インジケーターを備えた未入力のビューをユーザーに表示することをお勧めします。ネットワーキングが完了すると、1 ~ 2 秒かかる場合があります (または、失敗することもあります。誰にもわかりません)、ビューにデータを入力できます。これがどのように行われるかについての良い例は、さまざまな Twitter クライアントで見ることができます。たとえば、Twitterrific で著者の詳細ページを表示すると、ネットワーク クエリが完了するまで、ビューには "読み込み中..." としか表示されません。

于 2009-10-16T18:28:49.313 に答える
12

最初は、tableView で ViewDidLoad のみを使用していました。Wi-Fi が切断された状態でのテストでは、デバイスを機内モードに設定することで、Wifi の復帰時にテーブルが更新されないことがわかりました。実際、-Info.plist でバックグラウンド モードを YES に設定してホーム ボタンを押しても、デバイスの tableView を更新する方法はないようです。

私の解決策:

-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}
于 2012-11-29T20:52:36.377 に答える
5

ビューを開くたびにデータをロードする必要がありますか? または一度だけ

ここに画像の説明を入力

  • 赤 :毎回変更する必要はありません。それらがロードされると、元の状態のままになります。
  • 紫:時間の経過とともに、または毎回ロードした後に変更する必要があります。同じ 3 人のフォロー候補ユーザーを表示したくない場合は、画面に戻るたびに再読み込みする必要があります。彼らの写真は更新されるかもしれません... 5年前の写真を見たくない...

viewDidLoad:どのような処理を行う場合でも、一度実行する必要があります。
viewWilLAppear:ページが読み込まれるたびに変更する必要がある処理。

ラベル、アイコン、ボタンのタイトル、またはほとんどの dataInputedByDeveloperは通常変更されません。名前、写真、リンク、ボタンの状態、リスト (tableViews または collectionView の入力配列) またはほとんどの dataInputedByUserは、通常変更されます。

于 2016-09-08T16:17:16.500 に答える