Tôi gặp vấn đề khi nghe các sự kiện, tôi có thể nghe các sự kiện hoạt động hoàn hảo tuy nhiên tôi không thể dừng nghe các sự kiện. Tôi đã nghiên cứu nó một lúc và nghĩ ra một phương pháp, + (void) removeMonitor: (id) eventMonitor, mà nó nói rằng tôi nên sử dụng khi tôi thực hiện với người ngheLàm thế nào để ngừng nghe NSEvents?
Nhưng khi tôi cố gắng sử dụng phương pháp, như vậy
[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
[NSEvent removeMonitor:event];
}];
tôi tiếp tục nhận được một lỗi của "- [NSEvent làm mất hiệu lực]: chọn không được công nhận gửi đến dụ" mà tôi nghiên cứu là tốt, và tôi tin rằng nó có nghĩa là tôi đang ghi đè lên một ký ức đó là đang được sử dụng. Tuy nhiên tôi không biết làm thế nào để giải quyết vấn đề này. Bất kỳ đề nghị, hoặc giúp đỡ được đánh giá rất nhiều!
CẬP NHẬT Nhờ JWWalker, Samir và Abizern, bây giờ nó hoạt động
//I made a global variable called eventHAndler
tập tin .h
id eventHAndler
tập tin .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];
}
Tôi xin lỗi tôi vẫn còn bối rối. Làm thế nào để tôi nhận được giá trị trả về cho + [NSEvent addGlobalMonitorForEventsMatchingMask: handler:^(sự kiện NSEvent *)]? –
@ A.sharif, nếu bạn có nghĩa là làm thế nào để bạn nhận được nó trong khối xử lý sự kiện, sau đó thẳng thắn tôi không biết, tôi đã không bao giờ được sử dụng khối. – JWWalker
JWWalker là đúng. Một cái gì đó như: id eventHAndler = [NSEvent addGlobalMonitorForEventsMatchingMask: handler:]; .... [NSEvent removeHandler: eventHAndler] Đảm bảo rằng bạn chỉ gỡ bỏ trình xử lý một lần, nếu không bạn có thể gặp phải vấn đề về bộ nhớ. – Samir