代码是这样的:
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Hi there."];
[alert runModal];
return 0;
}
我想要的是:当我从命令行调用时,当我关闭警告框时,此程序会弹出一个警告框。程序退出。
但在建造时,它会抱怨:
Ld /Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Products/Debug/KeyCatcher normal x86_64
cd /Users/hanfei/Desktop/KeyCatcher
setenv MACOSX_DEPLOYMENT_TARGET 10.9
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -L/Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Products/Debug -F/Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Products/Debug -filelist /Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Intermediates/KeyCatcher.build/Debug/KeyCatcher.build/Objects-normal/x86_64/KeyCatcher.LinkFileList -mmacosx-version-min=10.9 -fobjc-arc -fobjc-link-runtime -framework Foundation -Xlinker -dependency_info -Xlinker /Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Intermediates/KeyCatcher.build/Debug/KeyCatcher.build/Objects-normal/x86_64/KeyCatcher_dependency_info.dat -o /Users/hanfei/Library/Developer/Xcode/DerivedData/KeyCatcher-hijnrqhwiafuxtdjmdubtsijyhwh/Build/Products/Debug/KeyCatcher
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_NSAlert", referenced from:
objc-class-ref in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我为新项目选择模板时,我选择command line tool
而不是CoCoa Application
,因为我只需要CoCoa来显示警告框。有没有人对此有所了解..
答案 0 :(得分:1)
那是因为NSAlert不是#imported
。
AppKit.h,正如您在链接中看到的那样,AppKit导入NSAlert.h
。
编辑:
首先,要编译,您需要在项目中添加 Cocoa 框架。
其次,所有代码都应该包含在@autoreleasepool
部分
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Hi there."];
[alert runModal];
}
您的代码将编译并运行,但我认为您还会遇到其他一些运行时错误。
答案 1 :(得分:0)
你需要在主函数
之前添加它 #import <AppKit/AppKit.h>
答案 2 :(得分:0)
我在使用NSAlert的C ++项目中遇到了同样的错误,这对我有用:
1)添加
#include <Cocoa/Cocoa.h>
2)在项目中添加Cocoa框架 - &gt; Buld阶段 - >使用库链接二进制文件。
3)设置&#34;类型&#34;所有我的.cpp文件到&#34; Objective-C ++ Source&#34;在xCode中最右边的列中。
答案 3 :(得分:0)
您需要像其他人一样导入AppKit,并且 - 与框架一样重要 - 您需要一个运行循环。所以在runModal
行
[NSApplication sharedApplication];
启动“应用程序”和运行循环