Mac OS 中NSSavePanel以及NSOpenPanel的使用

Mac OS开启沙盒之后,文件的保存会涉及到一个权限问题。如下图,在Capabilities中,可以勾选的权限一共有5种。

NSSavePanel

最近需要保存文档到本地,因为不是Pictures、Music或者Movies,不能使用这几个权限,因此使用NSSavePanel让用户自定义保存路径。以下是代码

复制代码
 1     NSSavePanel*    panel = [NSSavePanel savePanel];
 2     [panel setNameFieldStringValue:@"Untitle.onecodego"];
 3     [panel setMessage:@"Choose the path to save the document"];
 4     [panel setAllowsOtherFileTypes:YES];
 5     [panel setAllowedFileTypes:@[@"onecodego"]];
 6     [panel setExtensionHidden:YES];
 7     [panel setCanCreateDirectories:YES];
 8     [panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
 9         if (result == NSFileHandlingPanelOKButton)
10         {
11             NSString *path = [[panel URL] path];
12             [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
13         }
14     }];
复制代码

-1 第2行代码是设置默认的文件名

-2 第3行代码是设置提示信息

-3 第5行代码是设置允许的文件类型

-4 第6行代码是隐藏扩展名

-5 第7行代码是设置可以创建文件

-6 第8 - 14行代码是运行窗口

-7 第9行代码是判断用户点击的是不是OK按钮(默认title好像是Save)

-8 第11行代码是取出用户选择保存的路径

需要注意的是设置文件名的时候需要带上扩展名(如示例中第2行),需要设置允许的文件类型(如示例中第5行),并设置隐藏扩展名(如示例中第6行)以及可创建文件(如示例中第7行)。设置这几个属性之后,运行示例代码:

此时修改文档名字(如修改为onecodego),选择保存路径为Documents,点击save。

打开Finder,在Documents中就可以找到onecodego.onecodego。

需要注意的是这样保存的文档只能在当此打开的时候读写,也就是说当退出软件或者重启电脑对该路径文件的读写权限就没有了。

NSOpenPanel

使用NSOpenPanel打开用户选择的文件

复制代码
 1     NSOpenPanel *panel = [NSOpenPanel openPanel];
 2     [panel setDirectory:NSHomeDirectory()]; 
 3     [panel setAllowsMultipleSelection:NO];
 4     [panel setCanChooseDirectories:YES]; 
 5     [panel setCanChooseFiles:YES];
 6     [panel setAllowedFileTypes:@[@"onecodego"]];
 7     [panel setAllowsOtherFileTypes:YES];
 8     if ([panel runModal] == NSOKButton) {
 9         NSString *path = [panel.URLs.firstObject path];
10         //code
11     }
复制代码

-1 第2行代码是设置默认的路径

-2 第3行代码是设置不允许多选

-3 第4行代码是设置可以打开文件夹

-4 第5行代码是设置可以选中文件

-5 第6行代码是设置可以打开的文件类型

-6 第8行代码是判断用户选中的是不是OK按钮

-7 第9行取出用户选中的路径

需要注意的是需要设置允许的文件类型,如示例允许的文件类型为onecodego,因此在NSOpenPanel中只能打开后缀为onecodego的文件,如下图:


猜你喜欢

转载自blog.csdn.net/qq_27740983/article/details/50069459