2013-02-01 34 views
1

NSSavePanel记住以前选择的目录。使NSSavePanel忘记以前的目录

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

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

+1

默认值*是*最近一次查看的目录。这就是打开/保存面板如何设计的。你为什么要不同的东西? –

回答

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

如果我理解正确,你告诉我如何做与我想做的事情相反的事情。 NSSavePanel自己记得最后一个目录。我想将此行为重置为默认值。 – hpique

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

我也跟@FruityGeek说过一样的话。如果我理解正确,你告诉我如何做与我想做的事情相反的事情。 – hpique

+0

将默认路径存储在成员变量中。 –

+0

如何获取默认路径,然后(mDefaultURL)? – hpique

0

/* 要获得通过什么OS X决定是正确的默认 目录指向启动面板(没有一最后保存的一个)在运行面板之前删除保存在默认值中的所有值: */

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

NSSavePanel *savePanel = [NSSavePanel savePanel]; 

/* 如果您已删除默认值,你需要一个值传递到某个目录设置API,你想要得到的“默认”值,传递零。 (但是在沙箱打开/保存面板的生命周期的特定时间(开始运行后),由于安全考虑,您可能不会再允许更改目录。)如果您不删除默认保存的值,并且您将nil传递给目录设置API,您将获得上次使用的值。 */

[savePanel setDirectoryURL:nil]; 
相关问题