2014-09-10 89 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