有没有办法将不指向文件系统上存在的文件的项目添加到“打开最近”菜单?
在不基于 NSDocument 的应用程序中,我可以使用以下代码将项目添加到“打开最近”子菜单:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];
只要 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 的内部通常不使用它,因此这种方法不是一个好覆盖的方法。
但是文档没有说明要使用什么,海报也没有提供更多细节。任何想法?
如果没有解决方案,解决方法是从头开始重写整个菜单。如果可能的话,我宁愿避免这种情况,因为我免费获得的所有东西(比如当你有两个同名的项目时,它也会显示父目录以帮助区分它们)。