2014-09-10 86 views
0

我相信我看过每一篇与键盘输入有关的文章,但仍然无法使它工作。 ALl我想要的是一个输出,每当我在应用程序中输入一个键时使用NSLog。即时通讯目前使用的Xcode 5.我用尽的代码,很多片段作为Objective-c键盘输入

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) 
    NSLog(@"%@",event.characters); 

和IM不知道从哪里把他的代码。我把它的主要功能是这样

#import <Foundation/Foundation.h> 
#import <appkit/NSEvent.h> 

int main(int argc, char * argV[]) { 
@autoreleasepool{ 
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) 
    NSLog(@"%@",event.characters); 
} 
} 

显然进出口新的Objective-C中,我不打算与它继续,除非我能得到键盘输入工作。我已经试过了教程,来自键盘记录器的片段和mac开发论坛。谢谢。

+0

这段代码的问题究竟是什么? – 2014-09-10 23:44:38

+0

我在[NSEvent addGlobalMonit ... line]上得到了一个期望的表达式,但是这个表达式使用了它,并且使用片段似乎给出了相同的错误,或者没有错误,只是构建失败。 – user3671080 2014-09-10 23:54:18

回答

1

你的代码非常接近,但你已经挂上了块语法。块是非常强大和有用的,但语法真的很糟糕,我仍然在与它们合作2年后仍然苦苦挣扎。块比C函数指针更不可读,这就是很多。

它应该是这样的:

int main(int argc, char * argV[]) 
{ 
    @autoreleasepool 
    { 
    [NSEvent addGlobalMonitorForEventsMatchingMask: NSKeyDownMask 
      handler: ^(NSEvent *event) 
     { 
     NSLog(@"%@",event.characters); 
     } 
    ]; 
    } 
} 

我把所有的开放和独立的线路为清楚起见右括号。一个块需要用大括号括起来,并且你失去了大括号,以及在你的调用addGlobalMonitorForEventsMatchingMask:handler:

的结束括号,在Mac或iOS程序中更改main()函数是非常不寻常的。通常你只保留这一点,然后设置一个应用程序对象,设置一个委托,并将自定义代码放入应用程序委托中。

您应该开始为应用程序使用普通的Cocoa设计模式,而不是试图折腾它们。

如果你想用C风格的main()工作,你应该考虑创建一个交互式应用程序的命令行工具intend。如果您不遵循标准模式,您将自行设定失败。有太多的方法让事情错误。

您的主要是缺少创建工作的iOS或Mac应用程序所需的清洁工具

+0

非常感谢。我只是想看看在Objective C中做这样的事情有多困难,这就是把它放在主要方法中的原因,但由于某种原因,我仍然得到一个构建失败,没有行显示任何错误。在左侧,我得到一个“_OBJC_CLASS _ $ _ NSEvent”,引用来自:error,并且链接器命令失败,退出代码1(使用-v查看调用),这看起来会失败。另外,我应该把代码在一段时间(真),谢谢。 – user3671080 2014-09-11 11:59:41