ファイルシステム上に存在するファイルを指していないアイテムを「最近開いた」メニューに追加する方法はありますか?
NSDocumentに基づかないアプリケーションでは、次のコードを使用して[最近開いた]サブメニューに項目を追加できます。
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];
URLがファイルシステムに存在するファイルを指している限り、文書化されたとおりに機能します。
URLがWebURLやカスタム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の内部では通常使用されないため、オーバーライドするのに適していません。
しかし、ドキュメントには代わりに何を使用するかが記載されておらず、ポスターには詳細が記載されていません。何か案が?
解決策がない場合、回避策はメニュー全体を最初から書き直すことです。可能であれば、無料で入手できるすべてのものについては、それを避けたいと思います(同じ名前のアイテムが2つある場合など、それらを区別するために親ディレクトリも表示されます)。