当我使用

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];

09-07 20:59