2010-01-04 18 views
8

Ho bisogno di ottenere gli URL di tutti i file trascinati/rilasciati nella mia applicazione dal Finder.Come gestisco il trascinamento di più file dal Finder in Mac OS X 10.5?

Ho un'app Cocoa in esecuzione su 10.6 che utilizza le nuove API NSPasteboard 10.6 che gestiscono più elementi sul tavolo di montaggio. Sto cercando di eseguire il backport di questa app a 10.5. Come gestisco questo su 10.5?

Se faccio qualcosa come qui di seguito, ho solo il primo URL:

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

risposta

6

Il IKImageKit programming topics contorno un modo per farlo in questo modo (parafrasato):

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

vedere qui: Image Kit Programming Guide: Supporting Drag and Drop

9

Ottenere nomi di file multipli è facile: (Mentre ottenere multiple URLs is not con 10,5)

  1. Iscrivere il vostro vista per NSFilenamesPboardType
  2. In performDragOperation: effettuare le seguenti operazioni per ottenere una matrice di percorsi di file:

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

Il ritorno NSArray non è NSURL *. È NSString *. –

+0

Grazie per aver segnalato questo. (Ho rinominato l'array da 'urls' a 'filenames' per chiarire che il contenuto non è di tipo NSURL *) –

0

Come si gestiscono [più elementi su un cartoncino] su 10.5?

Provare il Pasteboard Manager.

La parte difficile è che si sta gestendo un drop, il che significa che stai ricevendo un NSPasteboard già creato per te, e non c'è modo di convertire tra gli oggetti NSPasteboard e PasteboardRef s. Dovrai chiedere all'NSPasteboard il suo name, quindi passare lo stesso nome a PasteboardCreate, e potrebbe non funzionare.

1

Il NSURLPboardType solo gestisce un URL.

Per ottenere un elenco di file è necessario creare un NSArray da un NSFilenamesPboardType.

Apple docs on drag and drop sono piuttosto buoni, anche se sono roba più vecchia.

Problemi correlati