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

标签 objective-c cocoa

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

相关文章:

objective-c - Xcode 在界面中有 ** 时放入 __autorelease

ios - 静态 NSDateFormatter 始终为 nil

cocoa - 有没有办法在 10.6 机器上获取/使用 OS X 10.3 Cocoa SDK?

cocoa - 匹配核心数据存储中的近似字符串

objective-c - 转换国际键盘的 CGKeyCode

macos - iCloud:获取 OS X 上云中存在的 txt 文件数组

objective-c - 控制声音的速度xcode

iphone - iPhone 应用程序中的 JsonParser

iphone - 需要对单例模式有一定的了解

ios - 获取相册列表的简单示例?