我正在为mac编写一个C程序,我需要允许用户选择一个应用程序来发送一个苹果事件。我可以使用 NavCreateChooseFileDialog()创建一个导航窗口,但我无法启用任何.app文件。如果我使用 NavDialogSetFilterTypeIdentifiers 限制类型,它只允许我选择文件夹名称中没有.app的应用程序,如MS Office。其他一切都是灰色的。

有什么想法吗?

有帮助吗?

解决方案

确保在inOptions.optionFlags中为NavCreateChooseFileDialog设置标志kNavSupportPackages,并将'APPL'放在类型列表中(可能仍然使用该param而不是NavDialogSetFilterTypeIdentifiers(),这样你将在10.3-上运行)你应该好好去,我只是尝试过。

或者,如果你不介意使用Cocoa,你可以使用 - [NSOpenPanel runModalForTypes:[NSArray arrayWithObjects:@“app”,nil]](也列出了非.app应用程序),然后你'只有一个FSPathMakeRef((UInt8 *)[path fileSystemRepresentation],& fsRef,NULL);远离FSRef。

请记住,在任何一种情况下,您获得的文件可能是别名,因此您必须尝试解决别名。

其他提示

请记住.app包是目录,因此您可能需要启用某种类型的allow-directories(或者更可能是enable-bundles)选项。

对不起,我无法提供更具体的帮助。我从Carbon开始,但从未接触过导航服务。

这对我有用:

NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;

[ panel runModal ] ;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top