黒毛和牛モモバラ切り落し100g298円

iPhoneアプリを作ってます。リリースノートとかごにょごにょとか用ブログです。

iPhoneアプリでハンドル可能なNotificationを全てトラップする方法

iOSが送出するNotificationを全てトラップするコールバックが使えると便利な時がたまにありますのでその方法です。

まずコールバック関数を用意します。とりあえず中身はNSLogするだけです。

static void
MyCallBack(CFNotificationCenterRef center, void *observer,
           CFStringRef name,const void *object,
           CFDictionaryRef userInfo)
{
    NSLog(@"observer: %@", observer);
    NSLog(@"name: %@", name);
    NSLog(@"userinfo: %@", userInfo);
    NSLog(@"object: %@", object);
}

次にルートViewControllerのViewDidLoadやAppDelegateのdidFinishLaunchingWithOptionsなどでCFNotificationCenterAddObserverを呼び出しコールバック関数を登録します。

CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
                                NULL,
                                MyCallBack,
                                NULL,
                                NULL,
                                CFNotificationSuspensionBehaviorDeliverImmediately);

これですべてのNotificationに対してMyCallbackが呼び出されるようになります。
実際の使用方法はこれで通知を調べて必要そうなものだけハンドリングするコードを書く形になると思います。

元ネタ: http://stackoverflow.com/questions/3725234/nsnotificationcenter-trapping-and-tracing-all-nsnotifications