我可以使用NSSavePanel和沙盒OS X应用程序让用户保存在桌面上吗?我给了用户下载和用户选择文件夹的读/写权限,由于某种原因,我的应用程序保存在下载文件夹中,但是当我更改目录并选择桌面时它根本不保存。
这是我用于NSSavePanel的代码
if([self.mActiveQRFileName isEqualToString:kQR_DEFAULT_FILE_NAME])
{
NSSavePanel *savePanel = [NSSavePanel savePanel];
//[savePanel setDirectoryURL:[NSURL URLWithString:[Utilities getQRDefaultDirectoryPath]]];
[savePanel setNameFieldStringValue:kQR_DEFAULT_FILE_NAME];
[savePanel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
if (result == NSFileHandlingPanelOKButton) {
NSString *qrFilePath = [NSString stringWithFormat:@"%@.%@",[[savePanel URL] path],kQR_FILE_EXT];
[qrd saveQRFile:qrFilePath];
self.mActiveQRFileName = [NSString stringWithString:qrFilePath];
blnChangesSaved = YES;
}
}];
}
else
{
[qrd saveQRFile:self.mActiveQRFileName];
blnChangesSaved = YES;
}
非常感谢任何帮助:)
答案 0 :(得分:3)
NSSavePanel
会为用户选择URL
属性中文件的路径。沙盒将仅授予您访问此文件的权限,其名称由用户指定。
在您的示例代码中,此行可能通过为其提供不同的文件扩展名来修改所选路径:
NSString *qrFilePath = [NSString stringWithFormat:@"%@.%@",[[savePanel URL] path],kQR_FILE_EXT];
这可能会导致文件名与您在沙箱中无权访问的原始文件不同。尝试记录qrFilePath
并查看它是否仍然等于所选URL的路径。还要检查沙箱异常以查看确切的错误。
如果您想限制NSSavePanel
让用户只指定某种类型的文件,请使用setAllowedFileTypes:
方法。
如果您希望用户授予您对可以输出任何文件的目录的访问权限,而不是特定路径:使用NSOpenPanel
。这样做的缺点是用户无法像NSSavePanel
中那样指定特定的文件名。