我完全是Objective-C和Cocao的初学者。
代码如下:
#import <Cocoa/Cocoa.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
NSSavePanel *sPanel = [NSSavePanel savePanel];
int result = [sPanel runModal];
if (result == NSOKButton) {
NSString * filename = [sPanel filename];
char * fileStr = [filename UTF8String];
printf("%s\n", fileStr);
}
return 0;
}发布于 2012-04-11 23:12:00
AppKit/Cocoa类需要初始化一个NSApplication对象,以便处理用户输入(以及其他内容)。将这一行添加到main函数的顶部应该可以做到这一点:
int main(int argc, char *argv[])
{
[NSApplication sharedApplication]; // ** Add this **
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSSavePanel *sPanel = [NSSavePanel savePanel];
int result = [sPanel runModal];
if (result == NSOKButton) {
NSString * filename = [sPanel filename];
const char * fileStr = [filename UTF8String];
printf("%s\n", fileStr);
}
[pool drain];
return 0;
}有关这方面的更多信息,可以在documentation for NSApplication中找到,特别是以下几点:
每个应用程序必须恰好有一个NSApplication实例(或NSApplication的子类)。您的程序的main()函数应该通过调用sharedApplication类方法来创建这个实例。
NSApplication执行从窗口服务器接收事件并将它们分发到适当的NSResponder对象的重要任务。NSApp将事件转换为NSEvent对象,然后将NSEvent对象转发给受影响的NSWindow对象。
按照bbum和danielpunkass下面的评论,这不是您真正编写Cocoa应用程序的方式,虽然它确实解决了您当前的问题,但它并不是一个完整或完全正确的解决方案。为了扩展Daniel的评论,并使您更容易上手,创建一个新的Cocoa应用程序项目。打开应用程序委托类(为您创建的),并将代码放入-applicationDidFinishLaunching:方法中。顾名思义,该方法是在应用程序完成启动之后调用的,并且一切都设置好了,以便您可以正常使用AppKit类。随着您获得更多经验,您将更好地理解典型的Cocoa应用程序架构,并可以继续创建用户界面等。
https://stackoverflow.com/questions/10106836
复制相似问题