2010-03-22 13 views
13

¿Cómo puedo soltar un archivo (o seleccionar para abrirlo en Finder) del tipo especificado en Info.plist en el icono de mi dock y luego llamar a un método con la ruta completa del archivo ?Colocando archivos en el icono Dock en Cocoa

+0

No entiendo la pregunta. ¿Está el usuario arrastrando un archivo al icono de su Dock, o quiere abrir el archivo mediante programación? –

+0

Me refiero a la ruta al archivo que se colocó en el icono del dock. –

Respuesta

15

Si ha configurado su gama de Info.plist CFBundleDocumentTypes adecuadamente (ya sea 'LSItemContentTypes' o 'CFBundleTypeExtensions'), a continuación, sólo tiene que configurar un delegado NSApplication y poner en práctica el método delegado, application:openFile:.

Si espera que se eliminen varios archivos a la vez, implemente application:openFiles:.

Para archivos prometidos (NSFilesPromisePboardType/kPasteboardTypeFileURLPromise) ver Dropping promised files on to application icon in Dock.

+0

He configurado mi matriz CFBundleDocumentTypes correctamente, y escribí el método, pero el icono de dock simplemente no aceptará mi archivo. –

+0

Tristian Seifert: Una posible causa de ese problema es que usted especificó una UTI en su plist, pero fue la incorrecta: http: // boredzo.org/blog/archives/2007-07-23/how-to-make-your-apps-dock-tile-highlight También debe asegurarse de importar cualquier UTI que mencione en la lista: http://developer.apple. com/mac/library/documentation/FileManagement/Conceptual/understanding_utis/ –

+0

Después de leer estos dos documentos, todavía no entiendo cómo agregar UTI a mi PList existente. Aquí hay una pequeña sección de mi Info.plist: \t \t \t \t \t CFBundleTypeIconFile \t \t \t Draft.icns \t \t \t CFBundleTypeExtensions \t \t \t \t \t \t \t podraft \t \t \t \t \t \t CFBundleTypeName \t \t \t Proyecto de Oficina de Correos \t \t ¿Qué tendría que añadir a esta definición por lo que el muelle aceptará el archivo? –

0

Si realmente está haciendo una aplicación basada en documentos, al configurarla para darle la ruta tendrá que hacer mucho más trabajo de lo que necesita. Simplemente use la plantilla de la aplicación basada en documentos. El controlador de documentos creará una instancia de la clase correcta para usted; solo necesitas escribir esa clase.

Una aplicación que cree de esta manera se encargará de las caídas de archivos (abriéndolos como documentos) de forma gratuita.

+0

No es una aplicación basada en documentos, es un lector de correo electrónico, y me gustaría poder arrastrar borradores, buzones, etc. a mi icono de dock. –

1

Seleccione su aplicación en el grupo objetivo del panel lateral y use get info. Luego, en la nueva ventana, seleccione la pestaña de propiedades para agregar un nuevo tipo de documento. Llámalo "Carpeta" por conveniencia y los Tipos de SO necesitan ser "doblados"; el tipo de tienda y el rol que puede dejar como está.

+0

Gracias Me ayudó a hacer que mi aplicación funcione. – AmitSri

5

En los sistemas actuales puede usar un UTI en lugar de los tipos de cuatro caracteres anteriores (como fold anterior). En el editor de tipo de documento de Xcode, hacer un nuevo tipo con:

  • Nombre: Carpeta
  • Identificador: public.folder

public.folder es un subtipo de public.directory. public.folder coincide con directorios que aparecen como tales para el usuario, es decir, no paquetes como .app envoltorios.

8

Aquí es una solución actualizada para Xcode 5. En AppDelegate.m

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)filename 
{ 
    NSLog(@"%@", filename); 
    return YES; 
} 

Y en Xcode Tipos de configuración del documento marco del Proyecto> Objetivos> Información: Project > Info > Document Types

Compruebe la configuración en Info.plist Si tiene una matriz vacía de "Tipo de contenido del documento UTI" que debe rellenarse correctamente o eliminarse. Delete empty Document Content Type UTIs array from Info.plist

Su Info.plist debería ser algo como esto: Document Types Info.plist

+0

¡excelente respuesta! muy útil. gracias – gypsyDev

+0

Tenga en cuenta que esto hará que su aplicación acepte * cualquier * archivo, no solo una extensión dada, porque CFBundleTypeExtensions se establece en '*'. Si solo admite ciertas extensiones de archivo, especifíquelas en su lugar. De lo contrario, el sistema operativo ofrecerá abrir archivos aleatorios con su aplicación solo para que su aplicación falle. – uliwitness

Cuestiones relacionadas