cocoa osx menu nsdocument recent-documents

cocoa - Agregue al menú "Abrir reciente" un elemento que no apunta a un archivo



osx menu (1)

¿Hay alguna manera de agregar un elemento que no apunta a un archivo que existe en el sistema de archivos al menú "Abrir reciente"?

En una aplicación no basada en NSDocument, puedo agregar un elemento al submenú "Abrir reciente" con el siguiente código:

[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:stringToFilePath]];

Funciona de la manera documentada , siempre que la URL apunte a un archivo que existe en el sistema de archivos.

Si la URL no apunta a un archivo en el sistema, como una url web o un esquema de url personalizado, no ocurre nada.

Por ejemplo, este código no tiene ningún efecto y no genera ningún registro durante la ejecución, incluso si mi aplicación maneja el esquema utilizado en la URL:

[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];

Actualización: alguien encontró (hace mucho tiempo) una forma de ajustar este menú para que muestre archivos, ya sea que existan o no: http://lists.apple.com/archives/cocoa-dev/2007/Apr/msg00651.html

Me las arreglé para subclasificar NSDocumentController, pero mi anulación del método - (NSArray *) recentDocumentURLs nunca se llama.

No es muy sorprendente, como dice el documento:

Este método no es bueno para anular ya que las partes internas de NSDocumentController generalmente no lo usan.

Pero el doctor no dice qué usar en su lugar y el cartel no dio más detalles. ¿Alguna idea?

Si no hay solución, la solución alternativa sería volver a escribir todo el menú desde cero. Si es posible, preferiría evitar eso, por todas las cosas que obtengo de forma gratuita (como cuando tienes dos elementos con el mismo nombre, también muestra el directorio padre para ayudar a diferenciarlos).


Parece que probablemente tendrá que crear su propio menú y mantener su propia lista por separado. Este menú excluye automáticamente los archivos que no existen.

Creo que esto también es cierto para los archivos en medios extraíbles que están ausentes (es decir, si los medios vuelven, creo que el archivo vuelve a estar disponible en la lista si no lo han eliminado elementos más recientes).