NSSavePanel
会记住上一个选定的目录。
如何让它忘记它,并恢复默认值?
我正在使用沙盒应用。
答案 0 :(得分:1)
每次都致电setDirectoryURL:
。
NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setDirectoryURL:[NSURL fileURLWithPath:PATH]];
或
[[NSUserDefaults standardUserDefaults] setValue:PATH forKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];
编辑
NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setCanChooseFiles:NO];
[savePanel setCanChooseDirectories:YES];
if (mDefaultURL) { // memeber variable NSURL *mDefaultURL;
[savePanel setDirectoryURL:[NSURL fileURLWithPath:mDefaultPath]];
}
//
[savePanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
if (result == NSFileHandlingPanelOKButton) {
[self setBaseURL:[openPanel URL]];
[self setupImagesMenu];
}
}];
NSLog(@"%@", [savePanel directoryURL]);
if (mDefaultURL==nil) {
mDefaultURL = [[NSURL alloc] initWithString:[[savePanel directoryURL] path]];
}
答案 1 :(得分:1)
/ * 通过指向OS X决定的内容来获得一个面板是正确的默认值 目录(缺少最后保存的目录)在运行面板之前删除默认保存的任何值: * /
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastCurrentDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSSavePanel *savePanel = [NSSavePanel savePanel];
/ * 如果您已删除默认值,并且需要将值传递给目录设置API,并且希望获得“默认”值,则传递nil。 (但是在沙盒打开/保存面板的生命周期中的某些时间(在它开始运行之后),由于安全问题,您可能不再允许更改目录。)如果您不删除默认值已保存的值将nil传递给目录设置API,您将获得最后使用的值。 * /
[savePanel setDirectoryURL:nil];
答案 2 :(得分:0)
首次显示面板时,将directoryURL
存储到静态变量中。使用setDirectoryURL
可以在以后使用保存面板时使用该目录。
在非沙盒应用中,您可以通过NSUserDefaults访问该值。你仍然可以。我知道在沙盒应用程序中调用时会替换NSSavePanel,它可能不会以相同的方式设置首选项(并且可能将它们保留在您无法访问的域中)。您可以在〜/ Library / Preferences / com.yourdomain.yourApp.plist中打开plist文件以找到确切的密钥。
NSSavePanel * savePanel = [[NSSavePanel alloc] init];
//store default directory prior to displaying save panel to user
NSURL * defaultDirectory = [savePanel directoryURL];
//Present to user, resetting default directory when done.
[savePanel beginSheetModalForWindow:window
completionHandler:^(NSInteger result) {
[[NSUserDefaults standardUserDefaults] setValue:defaultDirectory forKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];
}];