回答
第一次显示面板时,将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
添加代码来说明。 –
每次打电话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]];
}
/* 要获得通过什么OS X决定是正确的默认 目录指向启动面板(没有一最后保存的一个)在运行面板之前删除保存在默认值中的所有值: */
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastRootDirectory"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSNavLastCurrentDirectory"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSSavePanel *savePanel = [NSSavePanel savePanel];
/* 如果您已删除默认值,你需要一个值传递到某个目录设置API,你想要得到的“默认”值,传递零。 (但是在沙箱打开/保存面板的生命周期的特定时间(开始运行后),由于安全考虑,您可能不会再允许更改目录。)如果您不删除默认保存的值,并且您将nil传递给目录设置API,您将获得上次使用的值。 */
[savePanel setDirectoryURL:nil];
- 1. Matplotlib没有忘记以前的数据
- 2. Eclipse不会忘记以前的错误
- 3. 让eclipse/app'忘记'以前的布局?
- 4. 让变量忘记以前的值?
- 5. ASP.NET在bin目录中忘记dll
- 6. XCTestCase保存文件? (记录NSSavePanel)?
- 7. 登录前请不要忘记之前的路线Cakephp 3
- 8. 如何使JPA实体管理器忘记以前的异常?
- 9. 使用'created_at'查找以前的记录
- 10. 跳过一条记录并使用以前的记录数据
- 11. 记事本++当前目录
- 12. Linux:访问以前使用的目录
- 13. 如何使用NSSavePanel选择一个目录?
- 14. 用UINavigationController忘记以前的视图控制器
- 15. 如何让Lisp忘记以前导出的符号?
- 16. slickgrid选择行而过滤器忘记以前的选择
- 17. 检查以前的记录以更新Oracle中的当前记录
- 18. mySQL - 可以根据以前的记录值选择记录吗?
- 19. 使ViewPager在数据更改时忘记当前项目的位置
- 20. Hadoop/Datanode目录下当前和以前目录的含义
- 21. Cygwin'less'命令使bash忘记屏幕缓冲区历史记录
- 22. 什么会使foxpro备忘录表丢失记录?
- 23. Eclipse的备忘单资料库/目录
- 24. python持久化备忘录的目标
- 25. 忘记转让前更改名称服务器 - NS记录不更新
- 26. 是否可以继承NSSavePanel?
- 27. SQLite3“忘记”使用外键
- 28. 访问2016年VBA记录.addnew保存到以前的记录
- 29. 在Hibernate中持久化记录删除以前的记录
- 30. SELECT记录基于以前的记录内容(无关系)
默认值*是*最近一次查看的目录。这就是打开/保存面板如何设计的。你为什么要不同的东西? –