从NSEvent Block调用Cocoa ObjC方法

时间:2011-07-26 21:48:27

标签: objective-c cocoa macos

为什么这段代码不起作用:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [NSEvent addGlobalMonitorForEventsMatchingMask:(NSScrollWheelMask) handler:^(struct NSEvent *event){
        [scrollEvent:event];
    }];
}

- (void)scrollEvent:event {
    NSLog( @"scroll" );
}

它说“'scrollEvent'未声明”。

我只是在学习objc和cocoa,所以我认为这只是一个简单的错误。

2 个答案:

答案 0 :(得分:5)

您的代码似乎有一些错误。我清理了一些,请看下面的内容。

- (void) applicationDidFinishLaunching:(NSNotification *) aNotification { 
    [NSEvent addGlobalMonitorForEventsMatchingMask: NSScrollWheelMask handler:^(NSEvent *event){ 
        [self scrollEvent: event]; 
    }]; 
} 

- (void) scrollEvent: (NSEvent *) event { 
    NSLog( @"scroll" ); 
}

总结:

  • 你对该块的论证应该是NSEvent *,而不是。{ struct NSEvent *
  • 您需要将scrollEvent调用发送给自己。
  • 您的scrollEvent实现的签名不正确。

希望对该计划有所帮助和好运。

答案 1 :(得分:1)

我相信你的:scrollEvent方法的event参数需要有一个类型(NSEvent *)才能成为有效的方法签名。

- (void)scrollEvent:(NSEvent*)event {
    NSLog( @"scroll" );
}