使NSSavePanel忘记以前的目录

时间:2013-02-01 06:53:22

标签: macos cocoa appstore-sandbox nssavepanel

NSSavePanel会记住上一个选定的目录。

如何让它忘记它,并恢复默认值?

我正在使用沙盒应用。

3 个答案:

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