如何从默认的“另存为”对话框表中获取文件 URL?我在 Xcode 中使用带有 Snow Leopard 10.6 SDK 的基于文档的应用程序。
我已经搜索了两天的互联网和 Apple 文档,只找到了使用“另存为”对话框表的唯一实例的答案;每个人似乎都想通过制作自己的文件 -> 保存功能来重新发明轮子,但这不是我想要做的——我已经做到了!
例如,我不想使用这种方法,我不想用类似的东西替换默认-(void)saveDocumentAs:sender
值NSDocument
:
- (IBAction)saveFileAs:(id)sender
{
NSSavePanel *spanel = [NSSavePanel savePanel];
[spanel setCanCreateDirectories:YES];
[spanel setCanSelectHiddenExtension:YES];
[spanel setAllowedFileTypes:[[self currentDocument] writableTypesForSaveOperation:NSSaveAsOperation]];
[spanel setTreatsFilePackagesAsDirectories:YES];
[spanel beginSheetModalForWindow: [[[[self currentDocument] windowControllers] objectAtIndex:0] window] completionHandler:^(NSInteger result)
{
if (result == NSFileHandlingPanelOKButton)
{
NSString *type = [[self currentDocument] fileTypeFromLastRunSavePanel];
NSLog(@"%@", type);
NSURL *saveURL = [spanel URL];
NSLog(@"%@", saveURL);
[[self currentDocument] dataOfType:type error:nil];
}
}];
}
NSSavePanel
相反,我想要的只是用户从默认工作表中为其文件选择的文件 URL 。因为,正如您从这个测试中看到的fileTypeFromLastRunSavePanel
那样,它在块中不起作用,所以它要么使用默认保存面板而不是文件 URL 获取文件类型,要么从自定义保存面板而不是文件获取文件 URL类型...至少不是fileTypeFromLastRunSavePanel
.
- 用户打开文件
- 用户修改文件
- 用户执行“另存为...”
- 用户输入文件的新名称并按“保存”
- 我需要文件的新名称。如何在不创建自己的 savePanel 实例的情况下获得它?
[self fileURL]
编辑:我在 NSDocument 子类中尝试过
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
方法,但它返回 null 除非文档已经保存到磁盘。
编辑 2: 只是为了真正明确地澄清我在这里问什么,我如何从默认的 NSSavePanel savePanel 中获取用户选择的 URL,而不是我自己的 NSSavePanel 的 savePanel 实例?我可以在不创建 NSSavePanel 的子类并覆盖其方法的情况下做到这一点吗?我认为您将获得某种对用户在默认 savePanel 中选择的文件的 URL 引用,而不必将该功能添加到您自己的 NSSavePanel 实例中是有意义的。