イベントのリッスンに問題があります。完全に機能するイベントをリッスンできますが、イベントのリッスンを停止させることはできません。しばらく調べて、+(void)removeMonitor:(id)eventMonitorというメソッドを思いつきました。これは、リスナーを使い終わったら使用する必要があることを示しています。
しかし、私がその方法を使おうとすると、
[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
[NSEvent removeMonitor:event];
}];
「-[NSEventinvalidate]:認識されないセレクターがインスタンスに送信されました」というエラーが表示され続けます。これも調査しましたが、使用中のメモリを上書きしていることを意味していると思います。しかし、私はこの問題を解決する方法がわかりません。任意の提案、またはヘルプは大歓迎です!
更新JWWalker、Samir、Abizernのおかげで、動作するようになりました
//I made a global variable called eventHAndler
.hファイル
id eventHAndler
.mファイル
eventHAndler = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event){
///code
}];
/// created another method called stop. When called it stops the eventHAndler
- (IBAction)Stop:(id)sender
{
stop = 1;
NSLog(@"inside stop method");
[NSEvent removeMonitor:eventHAndler];
}