質問

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

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

役に立ちましたか?

解決

viewdidloadは、一度しなければならないことです。 ViewWillappearは、ビューが表示されるたびに呼び出されます。 Uilabelテキストを設定するなど、viewdidloadで一度だけしなければならないことをする必要があります。ただし、ユーザーが表示されるたびにビューの特定の部分を変更することもできます。たとえば、iPodアプリケーションは、「今プレイ」ビューに行くたびに歌詞を上にスクロールします。

ただし、サーバーから物事をロードしている場合は、遅延についても考える必要があります。すべてのネットワーク通信をViewDidloadまたはViewWillappearにパックすると、ユーザーがビューを確認する前に実行されます。最初にユーザーに、ある種のアクティビティインジケーターを備えた不明確なビューを表示することをお勧めします。ネットワーキングが完了したら、1〜2秒かかる場合があります(または失敗する可能性があります - 誰が知っているか?)、データにビューを入力できます。これがどのようにできるかについての良い例は、さまざまなTwitterクライアントで見ることができます。たとえば、Twitterrificで著者の詳細ページを表示すると、ビューはネットワーククエリが完了するまで「読み込み...」とのみ言います。

他のヒント

最初にTableViewを使用してViewDidloadのみを使用しました。 WiFiの喪失を伴うテストでは、デバイスを飛行機モードに設定することにより、テーブルがWiFiの戻りで更新されないことに気付きました。実際、-info.plistでyesに設定されたバックグラウンドモードでホームボタンを押しても、デバイスのテーブルビューを更新する方法はないようです。

私の解決策:

-(void) viewWillAppear: (BOOL) animated { [self.tableView reloadData];}

視ViewDidloadをポジショニングに使用することは少し危険であり、境界が設定されていないため避けるべきであることに注意することが重要です。これは予期しない結果を引き起こす可能性があります(さまざまな問題がありました...)

この郵便受け さまざまな方法とそれぞれで何が起こるかについて非常によく説明しています。

現在、1回限りのイニシとポジショニングのために、私は旗でviewdidapearを使用することを考えています。他の推奨事項がある場合は、私に知らせてください。

依存します、あなたはロードするデータを必要としますか ビューを開く時?またはのみ 一度?

enter image description here

  • 赤 : 彼らは毎回変更する必要はありません。彼らがロードされると、彼らは彼らがどのようにしているかのようにとどまります。
  • 紫の: 時間の経過とともに、または毎回ロードした後に変更する必要があります。同じ3人の提案されたユーザーがフォローするのを見たくありません。画面に戻るたびにリロードする必要があります。彼らの写真は更新されるかもしれません...あなたは5年前から写真を見たくありません...

viewDidLoad: あなたが持っているどんな処理でも、一度行う必要があります。
viewWilLAppear: ページがロードされるたびに変更する必要がある処理。

ラベル、アイコン、ボタンタイトル、またはほとんどのDatainputedByDeveloper いつもの 変更しないでください。名前、写真、リンク、ボタンステータス、リスト(TableViewsまたはCollectionViewの入力配列)またはほとんどのDatainputedByUser いつもの 変更してください。

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