有没有办法将未指向文件系统上的文件的项添加到“打开最近”菜单?
在不基于NSDocument的应用程序中,我可以使用以下代码将项目添加到“打开最近”子菜单:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];
只要URL指向文件系统上存在的文件,它就像documented一样。
如果网址未指向系统上的文件,例如网址或自定义网址方案,则不会发生任何事情。
例如,此代码无效,并且在执行期间不会生成日志,即使我的应用程序处理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一般不会 用它。
但该文件没有说明要使用什么,而海报没有提供更多细节。有什么想法吗?
如果没有解决方案,解决方法是从头开始重写整个菜单。 如果可能的话,我宁愿避免这种情况,对于我免费获得的所有东西(比如当你有两个同名的项目时,它也会显示父目录以帮助区分它们。)
答案 0 :(得分:6)
看起来您可能需要创建自己的菜单并维护自己的单独列表。此菜单自动排除不存在的文件。
我相信无法移动媒体上的文件也是如此(例如,如果媒体回来了,我相信如果文件没有被更近期的项目推迟,该文件将再次出现在列表中)。