2010-01-04 4 views
8

J'ai besoin d'obtenir les URL de tous les fichiers glissés/déposés dans mon application à partir du Finder.Comment gérer plusieurs glisser/déposer de fichiers à partir du Finder sous Mac OS X 10.5?

J'ai une application Cocoa fonctionnant sur 10.6 qui le fait en utilisant les nouvelles API NSPasteboard 10.6 qui gèrent plusieurs éléments sur la table de montage. J'essaye de rétroporter cette application à 10.5. Comment puis-je gérer cela sur 10.5?

Si je fais quelque chose comme ci-dessous, je ne reçois que la première URL:

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

Répondre

6

Le contour IKImageKit programming topics une façon de faire comme si (paraphrase):

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

Voir ici: Image Kit Programming Guide: Supporting Drag and Drop

9

Obtenir plusieurs noms de fichiers est facile: (Tout en obtenant multiple URLs is not avec 10,5)

  1. Enregistrez votre vue pour NSFilenamesPboardType
  2. Dans performDragOperation:, procédez comme suit pour obtenir un tableau de chemins de fichier:

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

Le NSArray retourné n'est pas NSURL *. C'est NSString *. –

+0

Merci d'avoir signalé cela. (J'ai renommé le tableau de 'urls' à 'noms de fichiers' pour faire comprendre que le contenu n'est pas de type NSURL *) –

0

Comment puis-je gérer [plusieurs éléments sur une table de montage] sur 10,5?

Essayez le Pasteboard Manager. La partie délicate est que vous gérez un drop, ce qui signifie que vous recevez un NSPasteboard déjà créé pour vous, et qu'il n'y a aucun moyen de convertir entre les objets NSPasteboard et PasteboardRef s. Vous devrez demander à la NSPasteboard pour ses name, puis passer le même nom à PasteboardCreate, et cela peut ne pas fonctionner.

1

Le NSURLPboardType gère une seule URL.

Pour obtenir une liste des fichiers, vous devez créer un NSArray à partir d'un NSFilenamesPboardType.

Les Apple docs on drag and drop sont plutôt bons, même s'ils sont plus anciens.

Questions connexes