2013年6月26日水曜日

NSNotificationCenterが便利

iOSのアプリの挙動の中には、ユーザーが操作して変化のトリガーになる場合と、アプリケーションの状態を監視して、変化のトリガーにする場合があります。

ユーザー操作の場合はUI-Kitの中に色々と記述してやれば大抵の事はフォロー出来ますが、アプリケーション側からのアクションは取得する方法が色々あって、殆どケースバイなので、結構めんどいです。おおよそ先に見通して変数化してどこかのトリガーで引っ掛けるんですが、中には取得しにくいパラメーターもあります。

具体例として、音楽プレーヤーの再生ボタンをトグルにしておいて、
・停止中
・再生中
・一時停止中
の3つの状態を持たせたいとします。このうち、再生中と一時停止中に関してはユーザーからのアクションなので問題無いですが、曲の終了時にボタンが停止状態にならなくて困っておりました。これってどこでトリガー取ればいいのかな、と。

で、調べてみるとNSNotificationCenterにブチ当ります。
これが調べてみると中々の優れもので、クラスのinitの際に初期化しておくと、指定したバラメーターの変化のタイミングで指定したセレクタを呼んでくれます。


初期化 viewDidLoadとか。
    MPMusicPlayerController* musicPlayer=[MPMusicPlayerController applicationMusicPlayer];
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter addObserver:self
                           selector:@selector(notificationPlayer)
                               name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
                             object:musicPlayer];
    [musicPlayer beginGeneratingPlaybackNotifications];

んで、指定したセレクタにホニョホニョとコードを書けば、OK牧場です。

 まだちょっとこの辺、理解が足らないんですが、他のパラメーターとかも色々取れれば、今までNSTimerとかに頼っていたダサイ感じの所がスマートに書き換えられる予感です。 自分的にも結構スッキリしました。
さて、仕事しよ。

0 件のコメント:

コメントを投稿