【发布时间】:2010-07-13 11:08:30
【问题描述】:
有没有办法将一个不指向文件系统中存在的文件的项目添加到“打开最近”菜单?
在不基于 NSDocument 的应用程序中,我可以使用以下代码将项目添加到“打开最近”子菜单:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];
它作为documented 工作,只要 URL 指向文件系统中存在的文件。
如果 url 不指向系统上的文件,例如 web url 或自定义 url 方案,则不会发生任何事情。
例如,这段代码没有任何作用,并且在执行过程中不会产生日志,即使我的应用程序处理了 URL 中使用的方案:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];
更新:有人(很久以前)找到了一种方法来调整这个菜单,让它显示文件是否存在:http://lists.apple.com/archives/cocoa-dev/2007/Apr/msg00651.html
我成功地继承了 NSDocumentController 的子类,但我对方法的覆盖 - (NSArray *)recentDocumentURLs 从未被调用。
正如文档所说,这并不令人惊讶:
这个方法不好 覆盖,因为内部 NSDocumentController 一般不会 使用它。
但是文档没有说明要使用什么,海报也没有提供更多细节。有什么想法吗?
如果没有解决方案,解决方法是从头开始重写整个菜单。 如果可能的话,我宁愿避免这种情况,因为我免费获得的所有东西(比如当你有两个同名的项目时,它也会显示父目录以帮助区分它们)。
【问题讨论】:
标签: cocoa macos menu nsdocument recent-documents