Есть ли способ добавить элемент, который не указывает на файл, существующий в файловой системе, в меню "Открыть последние"?
В приложении, не основанном на NSDocument, я могу добавить элемент в подменю «Открыть недавние» с помощью следующего кода:
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];
Он работает как задокументировано, если URL-адрес указывает на файл, существующий в файловой системе.
Если 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 обычно его не используют.
Но документ не говорит, что использовать вместо этого, и плакат не дает более подробной информации. Любая идея?
Если нет решения, обходным путем будет переписать все меню с нуля. Если возможно, я бы предпочел избежать этого для всех вещей, которые я получаю бесплатно (например, когда у вас есть два элемента с одинаковым именем, он также отображает родительский каталог, чтобы помочь их различать).