2

アプリケーションがバックグラウンドに入ったら、モーダル ビュー コントローラーを閉じたいと思います。コードを applicationDidEnterBackground に配置することでうまくいくと思いましたが、残念ながら、アプリが次にフォアグラウンドになるまでコマンドは画面に適用されません。ほんの一瞬、元のモーダル ビュー コントローラーが表示されますが、その後消えます。

applicationWillEnterBackground のようなメソッドはありますか? または、アプリがバックグラウンドに入る前に UI を更新する方法はありますか。

現時点では、次のコードがあります。

- (void)applicationDidEnterBackground:(UIApplication *)application {   

    NSLog(@"Application entered background state.");

    [splitVO dismissViewControllerAnimated:true completion:nil];
}
4

5 に答える 5

4

animatedパラメータを に設定してみてくださいNO

于 2013-08-02T10:48:46.163 に答える
0

バックグラウンドタスクIdentifireを有効にしてみてください

- (void)applicationDidEnterBackground:(UIApplication *)application {   

    NSLog(@"Application entered background state.");


    UIBackgroundTaskIdentifier bgTask;

    UIApplication *app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
    [splitVO dismissViewControllerAnimated:true completion:nil];
}
于 2013-08-02T10:41:59.533 に答える
0

通知 UIApplicationWillResignActiveNotification を購読します。これに対する応答として、UI を更新できます。

于 2013-08-02T10:44:33.227 に答える
0

デリゲートの applicationDidEnterBackground: メソッドには、タスクを終了して戻るのに約 5 秒かかります。実際には、このメソッドはできるだけ早く戻る必要があります。時間切れになる前にメソッドが戻らない場合、アプリケーションは強制終了され、メモリから消去されます。タスクの実行にさらに時間が必要な場合は、beginBackgroundTaskWithExpirationHandler: メソッドを呼び出してバックグラウンド実行時間を要求し、実行時間の長いタスクをセカンダリ スレッドで開始します。バックグラウンド タスクを開始するかどうかに関係なく、applicationDidEnterBackground: メソッドは 5 秒以内に終了する必要があります。

基本的に、viewDidAppear は、UIViewController のビューがアプリケーションの UIWindow 階層に追加された後に呼び出されます。バックグラウンド化してからアプリを復元しても、その点でビューは変更されないため、viewDidAppear は呼び出されません。これは正しい動作であり、バグではありません。UIViewController の API ドキュメントを確認してください。

于 2013-08-02T10:29:05.440 に答える