[iOS SDK] アプリがアクティブになる度に呼ばれる applicationDidBecomeActive から View Controller に処理を渡す方法
View Controller 内に記述する viewDidload, viewWillAppear メソッドなどは、新しくアプリが起動した時、アプリ内の画面遷移後などに呼ばれます。
しかし、他のアプリから切り替わった時(アクティブになった時)には、View Controller 内のメソッドは、呼ばれることはないようです。
アクティブになった時には、UIApplicationDelegate プロトコルにある - (void) applicationDidBecomeActive:( UIApplication ) application メソッドが呼び出されますが、その処理は View Controller で行いたい。
そこで、アプリがアクティブになる度に呼ばれる applicationDidBecomeActive から View Controller に処理を渡す方法を調べましたので、紹介します。
追記 2013 年 5 月 6 日 11:48
以下の様な処理を行わずとも、ViewController に次の NSNotification を登録しておけば、ApplicationDidBecomeActive のタイミングで通知が飛んできます。Yonemoto さん、ありがとうございました!
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:UIApplicationDidBecomeActiveNotification
object:nil];
デフォルトの通知センタを作成して処理を渡す
NSNotificationCenter というクラスを使用すると、通知という仕組みを使用できます。
ここでは、applicationDidBecomeActive にデフォルトの通知センタを作成して、そこの通知を View Controller 内で受け取るように実装していきます。
AppDelegate.m に、デフォルト通知を用意します。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"applicationDidBecomeActive" object:nil];
}
次に、ViewController.m に受け取る処理(オブザーバの登録)と受け取った後の処理を記述していきます。
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:@"applicationDidBecomeActive"
object:nil];
}
- (void)applicationDidBecomeActive {
NSLog(@"hogehoge");
}
dealloc メソッドで、applicationDidBecomeActive がオブザーバとなっている設定をデフォルトの通知センタから削除します。
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"applicationDidBecomeActive" object:nil];
[super dealloc];
}
これでアプリがアクティブになるたびに、「hogehoge」と表示されるはずです。