gpt4 book ai didi

objective-c - 仅具有 NSSavePanel 的 Cocoa 应用程序

转载 作者:行者123 更新时间:2023-12-03 16:43:24 25 4
gpt4 key购买 nike

我正在尝试创建一个显示 SavePanel 的 Cocoa 应用程序,并且在用户选择文件后,它将其打印在标准输出上。我是 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;
}

最佳答案

AppKit/Cocoa 类需要初始化 NSApplication 对象才能处理用户输入(除其他外)。将此行添加到主函数的顶部应该可以解决问题:

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 中找到。 ,特别是以下几点:

Every application must have exactly one instance of NSApplication (or a subclass of NSApplication). Your program’s main() function should create this instance by invoking the sharedApplication class method.
NSApplication performs the important task of receiving events from the window server and distributing them to the proper NSResponder objects. NSApp translates an event into an NSEvent object, then forwards the NSEvent object to the affected NSWindow object.

按照下面 bbum 和 danielpunkass 的评论,这并不是您真正编写 Cocoa 应用程序的方式,虽然它确实使您眼前的问题消失,但它不是一个完整或完全正确的解决方案。为了扩展 Daniel 的评论并让您轻松入门,请创建一个新的 Cocoa 应用程序项目。打开应用程序委托(delegate)类(为您创建),并将代码放入 -applicationDidFinishLaunching: 方法中。正如其名称所暗示的,该方法在应用程序完成启动后调用,并且一切都已设置好,以便您可以正常使用 AppKit 类。随着您获得更多经验,您将更好地理解典型的 Cocoa 应用程序架构,并可以继续创建用户界面等。

关于objective-c - 仅具有 NSSavePanel 的 Cocoa 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com