如何从默认的“另存为”对话框中获取文件 URL?我正在 Xcode 中使用带有 Snow Leopard 10.6 SDK 的基于文档的应用程序。
我在互联网和 Apple 文档中搜索了两天,只找到了使用“另存为”对话框表的唯一实例的答案;每个人似乎都想通过创建自己的"file"->“保存”功能来重新发明轮子,但这不是我想要做的——我已经这样做了!
例如,我不想使用这种方法,我不想用以下内容替换 NSDocument
中的默认 -(void)saveDocumentAs:sender
:
- (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
在 block 内不起作用,因此它要么使用默认保存面板获取文件类型而不是文件 URL,要么从以下位置获取文件 URL自定义保存面板而不是文件类型...至少不是 fileTypeFromLastRunSavePanel
。
- 用户打开文件
- 用户修改文件
- 用户执行“另存为...”
- 用户输入文件的新名称并按“保存”
- 我需要文件的新名称。如何在不创建自己的 savePanel 实例的情况下获取它?
编辑:我在 NSDocument 子类中尝试了 [self fileURL]
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
方法,但除非文档已保存到磁盘,否则它返回 null。
编辑2:只是为了真正明确我在这里问的问题,如何获取用户从默认 NSSavePanel savePanel 中选择的 URL,而不是我自己的 NSSavePanel savePanel 实例? 我可以这样做吗?这不需要创建 NSSavePanel 的子类并重写其方法吗?我认为向您提供对用户在默认 savePanel 中选择的文件的某种 URL 引用是有意义的,而无需将该功能添加到您自己的 NSSavePanel 实例中。
最佳答案
NSSavePanel *panel = [NSSavePanel savePanel];
[panel setMessage:@"Please select a path to create a new database."]; // Message inside modal window
[panel setAllowedFileTypes:[[NSArray alloc] initWithObjects:@"sqlite3", @"sqlite", @"db", nil]];
[panel setAllowsOtherFileTypes:YES];
[panel setExtensionHidden:NO];
[panel setCanCreateDirectories:YES];
[panel setTitle:@"Create a database"]; // Window title
[panel setNameFieldStringValue:@"Untitled.sqlite3"];
[panel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
path = [[panel URL] path];
url = [panel URL];
}
}];
关于objective-c - 从默认 NSSavePanel 获取文件 URL 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186761/