1

私は自分の問題を説明しようとします。appdelegate では、非同期リクエストの結果に応じて rootViewController を選択する必要があります (AFNetworking フレームワークを使用しています)。実際、ユーザーがプロファイリングされているかどうかを知る必要があります。プロファイリングされている場合は、アプリのホームを表示できます。プロファイリングされていない場合は、プロファイル ビューを表示する必要があります。

ストーリーボードではホーム ビューを指定のエントリ ポイントとして設定しましたが、この方法では非同期要求が完了するまで常にこのビューが表示されます。appdelegate に応答を待たせる方法はありますか?

4

4 に答える 4

4

ネットワーク接続が不十分な場合、アプリの読み込み時間が非常に長くなり、OS がアプリを強制終了したり、ユーザーがアプリをオフにしたりする可能性があるため、アプリのデリゲートに応答を待機させる良い解決策はないと思います。

ホーム ビュー コントローラーの代わりにローディング ビュー コントローラー (アプリが何かを実行していることをユーザーに知らせるためのアニメーション付き) を追加し、応答を受け取ったときにユーザーに適切なビューを提示することができます (モーダル セグエでジョブを実行できます)。この助けを願っています

于 2014-06-04T11:57:39.110 に答える
3

より良い解決策は、スプラッシュ スクリーンを使用することです。それは、アプリが AppDelegate に読み込まれるときです。スプラッシュ ビュー コントローラーを作成してプッシュします。これには、アプリケーションのスプラッシュ画像を表示する画面全体をカバーする単一の UIImageView が含まれます。非同期呼び出しの完了時に、そのスプラッシュ ビュー コントローラーをポップし、必要なビュー コントローラーをプッシュします。

多くのアプリは、この方法を使用して、アプリを表示する前に必要な非同期データをダウンロードします。そのため、ユーザーは空の画面やガベージ データを表示しません。

インターネット接続障害やサーバー応答エラーなどの障害が発生した場合、ユーザーにエラーを表示し、アプリのロジックに従ってエラー処理を実行します。

于 2014-06-04T12:08:26.953 に答える
0

次のようにプログラムでルート ビュー コントローラーに移動できます。

[self.navigationController popToRootViewControllerAnimated:YES];

このコードは、結果の条件に入れることができます。

または、あなたのやり方で、rootViewController へのナビゲーション用のセグエが作成されていると思います。を使用してプログラムでセグエを実行できます

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
于 2014-06-04T12:01:31.500 に答える
0

AFNetworking を使用している場合は、success ブロックにメソッドを追加し、そのメソッドへの応答を辞書のパラメーターに渡すだけです。メソッドの応答を確認し、そのメソッドからルート ビュー コントローラーを作成するコントローラーを選択します。

于 2014-06-04T12:05:08.010 に答える