3

NSSavePanel记住以前选择的目录。

我怎样才能让它忘记它,并恢复默认值?

我正在使用沙盒应用程序。

4

3 回答 3

2

/* 要获得一个面板,该面板首先指向 OS X 确定的正确默认目录(没有最后保存的目录),请在运行面板之前删除保存在默认值中的所有值:*/

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

NSSavePanel *savePanel = [NSSavePanel savePanel];

/* 如果你已经删除了默认值并且你需要将一个值传递给一个目录设置 API 并且你想获得“默认”值,传递 nil。(但是在沙盒打开/保存面板的生命周期中的某些时候(在它开始运行之后),出于安全考虑,您可能不再被允许更改目录。)如果您不删除默认保存的值并且您将 nil 传递给目录设置 API,您将获得最后使用的值。*/

[savePanel setDirectoryURL:nil];  
于 2014-10-29T21:15:51.810 回答
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]];
}
于 2013-02-01T11:32:51.140 回答
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];
                      }];
于 2013-02-01T08:07:09.397 回答