gpt4 book ai didi

objective-c - NSSavePanel 未保存在桌面上?

转载 作者:行者123 更新时间:2023-12-03 17:35:04 25 4
gpt4 key购买 nike

我可以将 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;
}

任何帮助将不胜感激:)

最佳答案

NSSavePanel 将为您提供用户在其 URL 属性中选择的文件路径。沙箱只会授予您访问此文件的权限,其名称由用户指定。

在您的示例代码中,此行可能会通过给定不同的文件扩展名来修改所选路径:

NSString *qrFilePath = [NSString stringWithFormat:@"%@.%@",[[savePanel URL] path],kQR_FILE_EXT];

这可能会导致文件名与您在沙箱中无权访问的最初选择的文件不同。尝试记录 qrFilePath 并查看它是否仍然等于所选 URL 的路径。另请检查您的沙箱异常以查看确切的错误是什么。

如果您想限制 NSSavePanel 让用户仅指定某种类型的文件,请使用 setAllowedFileTypes: 方法。

如果您希望用户授予您对可输出任何文件的目录的访问权限,而不是特定路径:请使用 NSOpenPanel。这样做的缺点是用户无法像在 NSSavePanel 中那样指定特定的文件名。

关于objective-c - NSSavePanel 未保存在桌面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14256307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com