2015-04-01 80 views
6

其中标识符如NSControlKeyMask,NSAlternateKeyMaskNSShiftKeyMask定义在哪里?我需要使用命名DDHotKey的Objective-C库,包含下面的代码编译斯威夫特项目:哪里是标识符,如NSControlKeyMask定义

if (modifiers & NSControlKeyMask) { 
    [final appendString:[characterMap objectForKey:@(kVK_Control)]]; 
} 
if (modifiers & NSAlternateKeyMask) { 
    [final appendString:[characterMap objectForKey:@(kVK_Option)]]; 
} 
if (modifiers & NSShiftKeyMask) { 
    [final appendString:[characterMap objectForKey:@(kVK_Shift)]]; 
} 

此代码给我下面的错误:

Use of undeclared identifier 'NSControlKeyMask'

Use of undeclared identifier 'NSAlternateKeyMask'

Use of undeclared identifier 'NSShiftKeyMask'

为什么?我究竟做错了什么?我该如何解决它?

在此先感谢。

+0

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/#//apple_ref/doc/constant_group/Modifier_Flags – 2015-04-01 14:28:53

+0

@Martin R And?我没有看到任何线索应该链接到哪个框架。将Appkit.framework添加到“Link Binary With Libraries”选项并未解决此问题 – FrozenHeart 2015-04-01 14:36:48

+2

doc显示它们是结构的静态成员“NSEventModifierFlags”。所以你通过NSEventModifierFlags.ControlKeyMask等来访问它们。 – 2015-04-01 14:42:11

回答

9

的“DDHotKey”示例项目使用预编译的头文件“DDHotKey_Prefix.pch”与内容

#ifdef __OBJC__ 
    #import <Cocoa/Cocoa.h> 
#endif 

使得<Cocoa/Cocoa.h>自动由所有目标C 来源包括。这又包括基础和AppKit框架 标题。

新的Xcode项目不再创建预编译头文件。 如果您刚将示例项目中的源文件复制到 一个新项目,则会发生错误。

你可以预编译的头文件添加到您的项目, 但实际上似乎足以补充

#import <AppKit/AppKit.h> 

在“DDHotKeyUtilities.m”。

+0

我在'DDHotKeyUtilities.m'中增加了一行'#import ',但现在它失败并显示错误:'1架构x86_64的重复符号' – 2016-11-30 10:04:19

+1

@DominikPalo:我确定在发布答案时对其进行了测试,但那是前一段时间。稍后当我有更多时间时,我会仔细检查它。 – 2016-11-30 10:06:05

+0

我从DFHotKey组中删除了文件'main.m',现在它可以工作! – 2016-11-30 10:18:41