macos - runModalForTypes 有效,但 setAllowedFileTypes+runModal 无效?

标签 macos cocoa nsopenpanel

当我使用时

NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"pdf", @"PDF", nil];
NSInteger result    = [openPanel runModalForTypes:fileTypes];

它按预期工作(只能选择pdf文件),但是当我使用时

NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"pdf", @"PDF", nil];
[openPanel setAllowedFileTypes:fileTypes];
NSInteger result    = [openPanel runModal];

我可以选择所有类型的文件,而不仅仅是 pdf。文档说 runModalForTypes 已被弃用,我们应该使用第二种方式。我做错了什么吗?

最佳答案

您正在为 Mac OS X 10.6 及更高版本进行构建吗?根据头文件:“在低于 10.6 的版本上,此属性将被忽略。”

否则,您的代码看起来是正确的(假设您在某个时候发布了 fileTypes)并且适用于我(在 Mac OS X 10.7.2 上测试)。

一个小建议是使用统一类型标识符来识别 PDF,而不是硬编码文件扩展名,如下所示:

NSArray *fileTypes = [NSArray arrayWithObjects:(id)kUTTypePDF, nil];

关于macos - runModalForTypes 有效,但 setAllowedFileTypes+runModal 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588549/

相关文章:

c# - Visual C# Directory.GetDirectories 问题 - "The specified server cannot perform the requested operation"

macos - 如何在 iCloud 中同步核心数据?(OS X Lion 应用程序)

python - wxPython 中的应用程序停靠图标

objective-c - 更改属性值时使用 Core Data 时出现 EXC_BAD_ACCESS 错误

macos - 等待完成处理程序完成

objective-c - 为什么 NSOpenPanel/NSSavePanel 显示内存泄漏?

java - 从 Java sleep OS X

iphone - 旋转时 UIBezierPath containsPoint 的问题

objective-c - cocoa /Objective-C : Access a (Boolean) variable in different Classes

objective-c - 获取文件路径文件打开对话框 cocoa ?