陽気なシステム屋が世界を変える

【iOS】NSNotificationCenterで困った!

Posted on 2015年3月13日 by osaka
このエントリーをはてなブックマークに追加

こんにちは。陽気なシステム屋のがおまるです。

今日は13日の金曜日って事ですので、
JSON(ジェイソン)の話をしようと思いましたが諦めましたw

詳しくはググってください。

さて、本題ですがiOSの機能でNSNotificationCenterというものがあります。
NSNotificationCenterを使用すると、
同じアプリ内の別クラスでイベントを通知する事が出来ます。

例えば、「動画を表示した」というイベントを受けて閲覧回数を記録したり、
「動画再生完了した」というイベントを受けて動画終了処理を行ったりと様々な通知があります。

しかし、こんな便利な機能でもiOSのバージョンによって動作が異なることがあったので、
同じ問題で困っている人が出てこないように私が行った対策を書こうと思います。

問題が発生したのは、動画を表示させるアプリで発生しました。
iOS8で確認したところ動画が表示されるタイミングで送られてくるはずの通知が来ず
困惑してしまいました。

対策の使用例は以下の通りです。

// iOSバージョン取得
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

if (osVersion >= 8.0f)  {  //iOS8以降
    //プレーヤ開始時(フルスクリーン状態になった時)
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(movieIsPlaying:)
                                          name:@"AVPlayerItemBecameCurrentNotification"
                                          object:nil];

    // プレーヤ停止時
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(movieStoppedPlaying:)
                                          name:@"UIWindowDidBecomeHiddenNotification"
                                          object:nil];
} else {  //iOS7 以下
    //プレーヤ開始時(フルスクリーン状態になった時)
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(movieIsPlaying:)
                                          name:@"UIMoviePlayerControllerDidEnterFullscreenNotification"
                                          object:nil];

    // プレーヤ停止時
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(movieStoppedPlaying:)
                                          name:@"UIMoviePlayerControllerDidExitFullscreenNotification"
                                          object:nil];
}

// 動画再生処理
- (void)movieIsPlaying:(NSNotification *)notification {
    NSLog(@"start player");
}

// 動画停止処理
-(void)movieStoppedPlaying:(NSNotification *)notification {
    NSLog(@"stop player");
}

イベントのまとめです。
他にもあるかもしれないですが…

// 動画再生
AVPlayerItemBecameCurrentNotification

// 動画完全再生終了
AVPlayerItemDidPlayToEndTimeNotification

// 動画再生
UIWindowDidBecomeVisibleNotification

// フルスクリーン閉じる
UIWindowDidBecomeHiddenNotification

OSのバージョンで処理が変わってしまうのは辛いですね(´Д⊂ヽ)
しかも今まで動いていた部分とかだとテストが疎かになったりして気が付きにくいです。。。

以上、NSNotificationCenterのお話でした!

弊社の開発実績はこちら

Posted in iPhoneアプリ, スマートフォンアプリ, 開発言語 | Tags: iOS, NSNotificationCenter, Objective-C |
« 【WatchKit】AppleWatchに長文のメッセージを表示する
【iOS mbaas】最短でPush通知を実装する。 »

Leave a comment コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

キャプチャ画像
画像のリフレッシュ

*

Pages

Archives

  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年8月
  • 2015年7月
  • 2015年6月
  • 2015年5月
  • 2015年4月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2014年5月
  • 2014年4月
  • 2014年3月
  • 2014年2月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月
  • 2013年7月
  • 2013年6月
  • 2013年5月
  • 2013年4月
  • 2013年3月
  • 2013年2月
  • 2013年1月
  • 2012年12月
  • 2012年11月
  • 2012年10月
  • 2012年9月
  • 2012年8月
  • 2012年7月
  • 2012年6月
  • 2012年5月
  • 2012年4月
  • 2011年5月
  • 2011年4月
  • 2011年3月

Categories

  • Androidアプリ (28)
  • ECサイト (7)
  • Facebook (3)
  • iPadアプリ (19)
  • iPhoneアプリ (41)
  • Webアプリ (27)
  • webサイト (37)
  • WindowsPhoneアプリ (1)
  • サービス (15)
  • スマートフォンアプリ (28)
  • セキュリティ (11)
  • ソーシャルメディア (7)
  • その他 (25)
  • デザイン (14)
  • マーケティング (14)
  • 勉強会 (5)
  • 基幹システム (2)
  • 新製品 (16)
  • 未分類 (171)
  • 開発全般 (64)
  • 開発言語 (31)

WordPress

  • ログイン
  • WordPress

Subscribe

  • Entries (RSS)
  • Comments (RSS)

Pages

Archives

  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年8月
  • 2015年7月
  • 2015年6月
  • 2015年5月
  • 2015年4月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2014年5月
  • 2014年4月
  • 2014年3月
  • 2014年2月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月
  • 2013年7月
  • 2013年6月
  • 2013年5月
  • 2013年4月
  • 2013年3月
  • 2013年2月
  • 2013年1月
  • 2012年12月
  • 2012年11月
  • 2012年10月
  • 2012年9月
  • 2012年8月
  • 2012年7月
  • 2012年6月
  • 2012年5月
  • 2012年4月
  • 2011年5月
  • 2011年4月
  • 2011年3月

Categories

  • Androidアプリ (28)
  • ECサイト (7)
  • Facebook (3)
  • iPadアプリ (19)
  • iPhoneアプリ (41)
  • Webアプリ (27)
  • webサイト (37)
  • WindowsPhoneアプリ (1)
  • サービス (15)
  • スマートフォンアプリ (28)
  • セキュリティ (11)
  • ソーシャルメディア (7)
  • その他 (25)
  • デザイン (14)
  • マーケティング (14)
  • 勉強会 (5)
  • 基幹システム (2)
  • 新製品 (16)
  • 未分類 (171)
  • 開発全般 (64)
  • 開発言語 (31)

WordPress

  • ログイン
  • WordPress

CyberChimps WordPress Themes

© 陽気なシステム屋が世界を変える