viewDidLoad
サブクラスに割り当てられるべきタスクのタイプとviewWillAppear
: に割り当てられるべきタスクのタイプについて、私はいつも少し不明確でしたUIViewController
。
UIViewController
たとえば、サブクラスがサーバーにヒットし、データを取得し、それをビューに供給してからそのビューを表示するアプリを実行しています。viewDidLoad
対でこれを行うことの長所と短所は何viewWillAppear
ですか?
viewDidLoad
サブクラスに割り当てられるべきタスクのタイプとviewWillAppear
: に割り当てられるべきタスクのタイプについて、私はいつも少し不明確でしたUIViewController
。
UIViewController
たとえば、サブクラスがサーバーにヒットし、データを取得し、それをビューに供給してからそのビューを表示するアプリを実行しています。viewDidLoad
対でこれを行うことの長所と短所は何viewWillAppear
ですか?
viewDidLoad は、一度行う必要があることです。viewWillAppear は、ビューが表示されるたびに呼び出されます。UILabel テキストの設定など、viewDidLoad で一度だけ行う必要があることを行う必要があります。ただし、ユーザーがビューを表示するたびに、ビューの特定の部分を変更したい場合があります。たとえば、iPod アプリケーションは、「再生中」ビューに移動するたびに歌詞をスクロールして一番上に戻します。
ただし、サーバーからロードする場合は、レイテンシーについても考慮する必要があります。すべてのネットワーク通信を viewDidLoad または viewWillAppear にパックすると、ユーザーがビューを表示する前にそれらが実行され、アプリが短時間フリーズする可能性があります。最初に、なんらかのアクティビティ インジケーターを備えた未入力のビューをユーザーに表示することをお勧めします。ネットワーキングが完了すると、1 ~ 2 秒かかる場合があります (または、失敗することもあります。誰にもわかりません)、ビューにデータを入力できます。これがどのように行われるかについての良い例は、さまざまな Twitter クライアントで見ることができます。たとえば、Twitterrific で著者の詳細ページを表示すると、ネットワーク クエリが完了するまで、ビューには "読み込み中..." としか表示されません。
最初は、tableView で ViewDidLoad のみを使用していました。Wi-Fi が切断された状態でのテストでは、デバイスを機内モードに設定することで、Wifi の復帰時にテーブルが更新されないことがわかりました。実際、-Info.plist でバックグラウンド モードを YES に設定してホーム ボタンを押しても、デバイスの tableView を更新する方法はないようです。
私の解決策:
-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}
ビューを開くたびにデータをロードする必要がありますか? または一度だけ?
viewDidLoad:
どのような処理を行う場合でも、一度実行する必要があります。
viewWilLAppear:
ページが読み込まれるたびに変更する必要がある処理。
ラベル、アイコン、ボタンのタイトル、またはほとんどの dataInputedByDeveloperは通常変更されません。名前、写真、リンク、ボタンの状態、リスト (tableViews または collectionView の入力配列) またはほとんどの dataInputedByUserは、通常変更されます。