4

私は経験豊富な C/C++ プログラマーですが、ObjC++ は初めてです。Mac OSX プロジェクトで NSWorkspacedidmountnofification をキャッチしようとしています。

アプリのデリゲート インターフェイスにコールバックを追加しました。

- (void)mediaMounted:(NSNotification *)notification;

実装には以下が含まれます

- (void)mediaMounted:(NSNotification *)aNotification {
    NSLog(@"mediaMounted volume change.");
}

applicationDidFinishLaunching で、自分自身を通知センターに追加します。

NSNotificationCenter* ncenter = [[NSWorkspace sharedWorkspace] notificationCenter];
[ncenter addObserver: self
            selector: @selector(mediaMounted)
                name: NSWorkspaceDidMountNotification
              object: nil];    

ただし、ディスクを実行してマウントすると、次のように表示されます。

 2012-08-29 09:52:31.753 OSN[2203:903] -[OSNAppDelegate mediaMounted]: unrecognized selector sent to instance 0x101340af0
 2012-08-29 09:52:31.756 OSN[2203:903] -[OSNAppDelegate mediaMounted]: unrecognized selector sent to instance 0x101340af0

インスタンス 0x101340af0 が自分の OSNAppDelegate であることを確認しましたが、セレクターが認識されるようにするために他に何をする必要があるのか​​ わかりません。

4

1 に答える 1

2

セレクターは次のようにする必要があります。

mediaMounted:ありませんmediaMounted

あなたの実装は、NSNotification をパラメータとして取りますが、何も取りません。

次の方法でセレクターを確認できます。

if( [self respondsToSelector:@selector(mediaMounted)] )
{
  NSLog(@"Good to go");
}

例:

// this selector
@selector(test)

// will call this method
- (void)test{ }

// but this selector, noting the :
@selector(test:)

// would call this method
- (void)test:(id)sender{ }

ここでセレクターについて読むことができます。

于 2012-08-29T19:53:52.037 に答える