kubou.dev();

好きな言葉は一石二鳥

NSNotificationCenterの使い方

iOSアプリのさまざま状態を監視して、マッチしたときに通知できる「NSNotificationCenter」。 わざわざdelegateメソッドを使わなくてもいいから便利です。

よく使うのは以下の監視状態。

  • UIApplicationDidFinishLaunchingNotification : アプリケーションが起動した直後
  • UIApplicationWillEnterForegroundNotification : アプリケーションがアクティブになる直前
  • UIApplicationDidBecomeActiveNotification : アプリケーションがアクティブになった時
  • UIApplicationDidEnterBackgroundNotification : アプリケーションがバックグラウンドに入る時
  • UIApplicationWillResignActiveNotification : アプリケーションがアクティブじゃなくなる直前
  • UIApplicationWillChangeStatusBarFrameNotification : ステータスバーのサイズ変更される直前
  • UIApplicationDidChangeStatusBarFrameNotification : ステータスバーのサイズ変更が発生した時
  • UIApplicationWillChangeStatusBarOrientationNotification : デバイスの向きが変わる直前
  • UIApplicationDidChangeStatusBarOrientationNotification : デバイスの向きが変わった時
  • UIApplicationDidReceiveMemoryWarningNotification : メモリ不足の警告発生時
  • UIApplicationWillTerminateNotification : アプリケーションが終了される直前

こんな感じでviewDidLoadあたりに書きましょう。

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

NSNotificationCenterに登録したら、監視を外す処理も忘れずに。 忘れちゃうと、selectorに設定したメソッドが複数回呼ばれたりします。

- (void)viewWillDisappear:(BOOL)animated
{
    // 省略
    // 監視を外す
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}