4

シングル ビュー アプリケーションがあります。ホームボタンを押してアプリケーションを「最小化」すると、ユーザーがアプリケーションを再度開いたときにコードを実行できるようにしたいと考えています。

何らかの理由で、アプリケーションを最小化して再度開いたときに、viewDidAppear と viewWillAppear が実行されません。

助言がありますか?

前もって感謝します

4

4 に答える 4

13

アプリデリゲートでコードを実行できます

- (void)applicationDidBecomeActive:(UIApplication *)application

UIApplicationDidBecomeActiveNotificationまたは、登録して通知を監視し、それに応じてコードを実行します。

アプリデリゲートには通知UIApplicationWillEnterForegroundNotificationとメソッドもあります。- (void)applicationWillEnterForeground:(UIApplication *)application


通知を接続するには、これを適切なポイントに追加します

  [[NSNotificationCenter defaultCenter] addObserver:self 
                                       selector:@selector(didBecomeActive:)
                                           name:UIApplicationDidBecomeActiveNotification
                                         object:nil];

対応するメソッドを定義する

- (void)didBecomeActive:(NSNotification *)notification;
{
    // Do some stuff
}

次に、適切な時点でオブザーバーを削除することを忘れないでください

[[NSNotificationCenter defaultCenter] removeObserver:self];

討論

ほとんどの場合、viewController が現在アクティブなビュー コントローラーであるときにのみイベントに応答する必要があるため、通知を登録するのにviewDidLoad適した場所は、オブザーバーとして自分自身を削除するのに適した場所です。viewDidUnload

メソッドで発生するのと同じロジックを実行したい場合は、viewDidAppear:それを別のメソッドに抽象化viewDidAppear:し、通知に応答するメソッドがこの新しいメソッドを呼び出すようにします。

于 2012-05-13T15:57:50.880 に答える
2

これは、Apple が「マルチタスキング」を実装したため、アプリを再度起動すると、アプリを一度も閉じていないかのように、アプリが完全にリロードされるためです。このため、viewDidAppear が呼び出される理由はありません。

実装することもできます

- (void)applicationWillEnterForeground:(UIApplication *)application

そして、あなたが望むことをそこでしてください。UIApplicationWillEnterForegroundNotificationまたは、View Controller で通知を登録します。viewDidLoad でこれを行います。

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myAppWillEnterForeground) 
    name:UIApplicationWillEnterForegroundNotification object:nil];

もちろん、指定されたセレクターを実装し、そこで必要なことを行います。

于 2012-05-13T16:04:02.130 に答える
0

これは、ビューを再描画しないためです。代わりに、AppDelegate でapplicationWillEnterForegroundを使用してください。これはうまくいくはずです。

于 2012-05-13T15:57:47.557 に答える