3

AppController.h/mというクラスがあります。NSNotificationDidResignActiveNotificationが送信されたときに何かを作成したいと思います。だから私はAppController.mでこのコードを書きました:

-(void) initialize(){
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidResignActive:)
                                                     name:NSApplicationDidResignActiveNotification
                                                   object:nil ];
}

その後

-(void) applicationDidResignActive (NSNotification*) note{
    NSBeep();
}

問題は、メソッドが実行されておらず、コンソールでこれを取得することです。

+[AppController applicationDidResignActive:]: unrecognized selector sent to class 0x61c4

問題がどこにあるのかわかりません。助けてくれませんか。
ありがとうございました!

4

1 に答える 1

3

initializeはクラスメソッドであり、インスタンスメソッドではありません。これは確かにはわかりませんが、クラスメソッドでセレクターを使用する場合、セレクターはクラスメソッドであると想定しているようです(正当な理由があります)。AppControllerには、と呼ばれるインスタンスメソッドがありますが、applicationDidResignActiveそのように名前が付けられたクラスメソッドはありません。

で通知を登録する代わりに、そこで+initializeオーバーライド-initして登録します。

- (void)init
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidResignActive:)
                                                     name:NSApplicationDidResignActiveNotification
                                                   object:nil ];
}
于 2011-03-02T21:09:25.920 に答える