Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSOpenPanel设置允许的文件类型_Objective C_Nsopenpanel - Fatal编程技术网

Objective c NSOpenPanel设置允许的文件类型

Objective c NSOpenPanel设置允许的文件类型,objective-c,nsopenpanel,Objective C,Nsopenpanel,我有一个打开的面板。但我想让它只可选择PDF文件。我在找这样的东西: // NOT WORKING NSOpenPanel *panel; panel = [NSOpenPanel openPanel]; [panel setFloatingPanel:YES]; [panel setCanChooseDirectories:YES]; [panel setCanChooseFiles:YES]; [panel setAllowsMultipleSelection:YES]; [panel

我有一个打开的面板。但我想让它只可选择PDF文件。我在找这样的东西:

// NOT WORKING 
NSOpenPanel *panel;

panel = [NSOpenPanel openPanel];
[panel setFloatingPanel:YES];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"pdf"]];
int i = [panel runModalForTypes:nil];
if(i == NSOKButton){
    return [panel filenames];
}

我希望有人能找到解决办法。

我注意到了几件事。。将
setcanchooseddirectories
更改为NO。启用时,表示文件夹是有效的输入。这很可能不是您想要的功能。对于区分大小写的系统,您可能还希望将允许的文件类型更改为
[NSArray arrayWithObject:@“pdf”,“pdf”,nil]
runModalForTypes
应该是文件类型的数组。将代码更改为如下所示:

// WORKING :)
NSOpenPanel *panel;
NSArray* fileTypes = [NSArray arrayWithObjects:@"pdf", @"PDF", nil];
panel = [NSOpenPanel openPanel];
[panel setFloatingPanel:YES];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:fileTypes];
int i = [panel runModal];
if(i == NSOKButton){
    return [panel URLs];
}
Swift 4.2:

let fileTypes = ["jpg", "png", "jpeg"]
let panel = NSOpenPanel()
panel.canChooseFiles = true
panel.canChooseDirectories = false
panel.allowsMultipleSelection = false
panel.allowedFileTypes = fileTypes
panel.beginSheetModal(for: window) { (result) in
    if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
         // Do something with the result.
         let selectedFolder = panel.urls[0]
         print(selectedFolder)
    }
}

你很接近答案

首先,去掉
[panel setcanchooseddirectories:YES]
,这样就不允许使用目录


然后,将
[panel runModalForTypes:nil]
更改为
[panel runModal]
,或者取消对
[panel setAllowedFileTypes::
的调用,并将数组传递给
[panel runModalForTypes:

这不会泄漏文件类型吗?@MKatz感谢您的帮助。无弧alloc后必须释放。我将把它改为arrayWithObjects:虽然没有生成错误,但这不起作用。文件选择窗口打开,但显示所有文件类型,并且可以正常选择…使用MacOS Mojave 10.14.5 XCode 11 Beta上的Swift 5