2010-12-06 11 views
0

Je gère une opération de glisser-déposer sur un IKImageBrowserView. Dans mon délégué de destination glisser-déposer, j'accepte les gouttes NSFilenamesPboardType. La partie bizarre est que les chaînes de chemin de fichier que je récupère commencent toutes par "/ Users/..." au lieu de "file: // localhost/..." comme je le fais quand j'utilise un NSOpenPanel. Lorsque je les convertis en NSURL pour l'utilisation par IKImageBrowserView pour afficher des images, il devient confus car il ne comprend que les chemins complets commençant par "file: // localhost/...". Je peux pirater le préfixe, comme je l'ai fait dans l'extrait ci-dessous, mais je me demandais s'il y avait une manière programmatique d'obtenir des chemins complets à la place?Pouvez-vous obtenir des chemins complets à partir de la table de montage lorsque vous faites glisser et déposer?

if ([[pasteboard types] containsObject:NSFilenamesPboardType]) 
{ 
    NSData* data = [pasteboard dataForType:NSFilenamesPboardType]; 
    if (data) 
    { 
     NSString* errorDescription; 
     NSArray* filenames = [NSPropertyListSerialization 
      propertyListFromData:data 
      mutabilityOption:kCFPropertyListImmutable 
      format:nil 
      errorDescription:&errorDescription]; 

     for (id filename in filenames) 
     { 
      NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"file://localhost%@", filename]]; 

      NSLog(@"Adding URL: %@", url); 

Répondre

5

Pour créer une URL de fichier à partir d'un chemin complet, ne vous pas ajouter le préfixe file://. Il suffit d'utiliser

NSURL* url=[NSURL fileURLWithPath:pathString]; 

Voir the documentation.

Du point de vue du système d'exploitation,

/Users/myname/file.txt 

est le chemin complet d'un fichier dans le système. Dans une API de plus haut niveau qui permet également divers accès réseau, le fichier local se distingue en mettant le protocole file://. Ces API pboard sont antérieures à l'utilisation prédominante des URL dans l'API, c'est pourquoi les chemins d'accès sont renvoyés en tant que chemin d'accès complet, et non en tant qu'URL de fichier.

+0

Merci, ça a bien fonctionné – evilfred