0

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

任何帮助将不胜感激 :)

4

1 回答 1

3

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

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

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

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

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

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

于 2013-01-12T14:46:06.973 回答