Добавить в меню «Открыть недавние» элемент, который не указывает на файл

Есть ли способ добавить элемент, который не указывает на файл, существующий в файловой системе, в меню "Открыть последние"?

В приложении, не основанном на 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 обычно его не используют.

Но документ не говорит, что использовать вместо этого, и плакат не дает более подробной информации. Любая идея?


Если нет решения, обходным путем будет переписать все меню с нуля. Если возможно, я бы предпочел избежать этого для всех вещей, которые я получаю бесплатно (например, когда у вас есть два элемента с одинаковым именем, он также отображает родительский каталог, чтобы помочь их различать).


person Guillaume    schedule 13.07.2010    source источник


Ответы (1)


Похоже, вам, вероятно, придется создать собственное меню и вести свой отдельный список. Это меню автоматически исключает несуществующие файлы.

Я считаю, что это также верно для файлов на съемных носителях, которые отсутствуют (т. е. если носитель возвращается, я считаю, что файл снова доступен в списке, если он не был вытеснен более поздними элементами).

person Joshua Nozzi    schedule 13.07.2010
comment
Я связался с человеком, который отправил сообщение в список рассылки Apple. Несмотря на то, что он создал подкласс NSDocumentController, поскольку недавний документURLs никогда не вызывается, в конечном итоге он создает меню вручную. - person Guillaume; 15.07.2010
comment
Ага, я тоже выстроил отдельный список и показал аналогичное меню пользователю. В моем случае список имеет смешанные типы местоположений (локальный, URL-адрес, облако). Мне пришлось свернуть свои собственные открытые последние для случая локальных файлов, но мне не удалось заставить приложение связать файлы с их местоположением - при сохранении появляется диалоговое окно «Сохранить как». - person Radu Simionescu; 02.02.2016
comment
Хорошо, тем временем я переопределил saveDocument и вызвал writeSafelyToUrl. Но я думаю, что теперь приложение больше не является песочницей, что означает, что оно не попадет в магазин? - person Radu Simionescu; 02.02.2016
comment
@RaduSimionescu Это следует опубликовать как отдельный вопрос, а не как комментарий. - person Joshua Nozzi; 02.02.2016
comment
Как бы вы открывали URL-адреса локальных файлов с помощью собственных кнопок меню, когда приложение необходимо поместить в песочницу? Кажется, я получаю доступ к пути ... отказано. - person Radu Simionescu; 09.02.2016
comment
хорошо, я думаю, что я решил это. Вот что происходит: если вы управляете своими собственными локальными URL-адресами файлов в недавнем списке, доступ к созданным вами NSURls будет недоступен. НО если вы берете их из NSDocumentController-recentFilesList, они доступны. Система, вероятно, делает некоторые исключения доступа только для объектов NSUrl из этого списка, даже если ваши собственные NSUrls указывают на те же файлы. - person Radu Simionescu; 09.02.2016
comment
Да, см. закладки в области безопасности — это первое поле Важно почти в самом начале Руководства по программированию файловой системы ( developer.apple.com/library/mac/documentation/FileManagement/ ) и указывает на руководство по проектированию тестовой среды приложения ( developer.apple.com/library/mac/documentation/Security/ ). - person Joshua Nozzi; 09.02.2016