シングル ビュー アプリケーションがあります。ホームボタンを押してアプリケーションを「最小化」すると、ユーザーがアプリケーションを再度開いたときにコードを実行できるようにしたいと考えています。
何らかの理由で、アプリケーションを最小化して再度開いたときに、viewDidAppear と viewWillAppear が実行されません。
助言がありますか?
前もって感謝します
シングル ビュー アプリケーションがあります。ホームボタンを押してアプリケーションを「最小化」すると、ユーザーがアプリケーションを再度開いたときにコードを実行できるようにしたいと考えています。
何らかの理由で、アプリケーションを最小化して再度開いたときに、viewDidAppear と viewWillAppear が実行されません。
助言がありますか?
前もって感謝します
アプリデリゲートでコードを実行できます
- (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:
し、通知に応答するメソッドがこの新しいメソッドを呼び出すようにします。
これは、Apple が「マルチタスキング」を実装したため、アプリを再度起動すると、アプリを一度も閉じていないかのように、アプリが完全にリロードされるためです。このため、viewDidAppear が呼び出される理由はありません。
実装することもできます
- (void)applicationWillEnterForeground:(UIApplication *)application
そして、あなたが望むことをそこでしてください。UIApplicationWillEnterForegroundNotification
または、View Controller で通知を登録します。viewDidLoad でこれを行います。
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myAppWillEnterForeground)
name:UIApplicationWillEnterForegroundNotification object:nil];
もちろん、指定されたセレクターを実装し、そこで必要なことを行います。
これは、ビューを再描画しないためです。代わりに、AppDelegate でapplicationWillEnterForegroundを使用してください。これはうまくいくはずです。