使NSSavePanel忘记以前的目录

3

NSSavePanel会记住之前选择的目录。

我如何让它忘记之前的设置,恢复默认值?

我正在使用一个受沙盒限制的应用程序。


1
默认值是上次查看的目录。这就是打开/保存面板的设计原理。你为什么想要不同的东西呢? - Mike Abdullah
3个回答

2

/* 删除defaults中保存的任何值后运行面板,即可获得指向OS X决定为正确默认目录(如果没有最后保存的目录)的面板: */

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastCurrentDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];

NSSavePanel *savePanel = [NSSavePanel savePanel];

/* 如果您已删除默认设置并且需要向目录设置API传递值,并且想要获取“默认”值,请传递nil。(但在沙盒式打开/保存面板的某些生命周期时(在其开始运行后),由于安全问题,您可能不允许再更改目录。)如果您没有删除已保存的默认值并且将nil传递给目录设置API,则会获得上次使用的值。 */

[savePanel setDirectoryURL:nil];  

1

每次调用setDirectoryURL:

NSSavePanel *savePanel = [NSSavePanel savePanel];

[savePanel setDirectoryURL:[NSURL fileURLWithPath:PATH]];  

或者

[[NSUserDefaults standardUserDefaults] setValue:PATH forKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];  

EDIT

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
我告诉@FruityGeek的也是同样的事情。如果我理解正确,你告诉我如何做与我想要做的相反的事情。 - hpique
将默认路径存储在成员变量中。 - Parag Bafna
你如何获取默认路径,然后(mDefaultURL)? - hpique
1
第一次你将获得[savePanel directoryURL](默认值)。 - Parag Bafna

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];
                      }];

如果我理解正确的话,您告诉我如何做与我想要做的相反的事情。NSSavePanel会自动记住上次使用的目录。我希望将此行为重置为默认值。 - hpique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接