【发布时间】:2014-03-19 19:07:25
【问题描述】:
我正在生成一个 PDF 文档并为用户提供将其保存到磁盘的选项。我向他们展示了一个NSSavePanel,让他们选择要保存的文件名。如果他们选择了一个已经存在的文件,它会提示他们是否确定并想要替换该文件。如果他们同意替换文件,那么我会生成 PDF 并将其写入所选的 URL。
但是,我的写入失败并出现以下错误:
CGDataConsumerCreateWithFilename: failed to open `/path/to/.myfile.pdf' for writing: Operation not permitted
我有适当的权利来写入磁盘上的文件。碍事的文件是我在之前的测试中生成的文件。在将我的文件写入该 URL 之前,我是否需要明确删除现有文件,或者有什么方法可以告诉系统它可能会覆盖现有文件?
这是我用来启动NSSavePanel 的代码(我的代码保存了他们最后选择的目录,以便以后保存时可以默认到相同的位置):
- (NSURL*) requestSaveFilenameForExtension:(NSString*)fileExtension previousSaveDirectorySettingKey:(NSString*)previousDirectorySettingKey defaultFilename:(NSString*)defaultFilename {
NSSavePanel *panel = [NSSavePanel savePanel];
[panel setAllowedFileTypes:[NSArray arrayWithObject:fileExtension]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *previousSaveDirectory = [defaults stringForKey:previousDirectorySettingKey];
if (previousSaveDirectory == nil) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
previousSaveDirectory = [paths objectAtIndex:0];
}
[panel setExtensionHidden:NO];
[panel setNameFieldStringValue:defaultFilename];
[panel setDirectoryURL:[NSURL fileURLWithPath:previousSaveDirectory]];
NSInteger ret = [panel runModal];
if (ret == NSFileHandlingPanelOKButton) {
NSString *saveDirectory = [[[panel URL] absoluteString] stringByDeletingLastPathComponent];
[defaults setValue:saveDirectory forKey:previousDirectorySettingKey];
return [panel URL];
} else {
return nil;
}
}
这是我用来将文件写入给定 URL 的代码,它只是标准的 PDFKit -writeToURL::
PDFDocument *document = [self generateDocument];
[document writeToURL:documentURL];
【问题讨论】:
-
我遇到了同样的问题..有什么办法解决这个问题吗?
-
也遇到了这个问题
标签: macos nssavepanel