2010-01-04 10 views
8

Necesito obtener las URL de todos los archivos arrastrados/soltados en mi aplicación desde Finder.¿Cómo manejo varios archivos arrastrando/soltando desde Finder en Mac OS X 10.5?

Tengo una aplicación Cocoa ejecutándose en 10.6 que hace esto mediante el uso de las nuevas 10.6 NSPasteboard API que manejan varios elementos en la mesa de trabajo. Estoy intentando respaldar esta aplicación con 10.5. ¿Cómo manejo esto en 10.5?

Si hago algo, como a continuación, solo me dan la primera URL:

NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil]; 
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) { 
     NSURL *url = [NSURL URLFromPasteboard:pboard]; 
    }   

Respuesta

6

El IKImageKit programming topics esquema de una forma de hacer esto como tal (parafraseado):

NSData *data = [pasteboard dataForType:NSFilenamesPboardType]; 
    NSArray *filenames = [NSPropertyListSerialization 
     propertyListFromData:data 
      mutabilityOption:kCFPropertyListImmutable 
         format:nil 
      errorDescription:&errorDescription]; 

Ver aquí: Image Kit Programming Guide: Supporting Drag and Drop

9

conseguir múltiples nombres de archivo es fácil: (Mientras que conseguir multiple URLs is not con 10,5)

  1. Registra tu vista para NSFilenamesPboardType
  2. En performDragOperation: haga lo siguiente para obtener una matriz de rutas de archivos:

NSPasteboard* pboard = [sender draggingPasteboard]; 
NSArray* filenames = [pboard propertyListForType:NSFilenamesPboardType]; 
+0

El NSArray devuelto no es NSURL *. Es NSString *. –

+0

Gracias por señalar esto. (Cambié el nombre de la matriz de 'urls' a 'nombres de archivo' para dejar en claro que los contenidos no son de tipo NSURL *) –

0

¿Cómo manejo [Elementos múltiples en una mesa de trabajo] en 10,5?

Pruebe el Pasteboard Manager.

La parte difícil es que maneja una gota, lo que significa que está recibiendo una NSPasteboard ya creada para usted, y no hay forma de convertir objetos NSPasteboard a PasteboardRef s. Tendrá que pedirle a NSPasteboard su name, luego pasar el mismo nombre al PasteboardCreate, y eso puede no funcionar.

1

El NSURLPboardType solo maneja una URL.

Para obtener una lista de archivos, necesita crear un NSArray desde un NSFilenamesPboardType.

Apple's docs on drag and drop son bastante buenos, incluso si se trata de cosas más antiguas.

Cuestiones relacionadas