2010-07-12 21 views
1

J'utilise les en-têtes Finder.h générés à partir de l'utilitaire sdef, et il semble que beaucoup de méthodes Finder SB requièrent des objets de type FinderItem pour faire quelque chose de significatif avec .Utilisation d'un fichier par pathname/URI à l'aide de Finder + ScriptingBridge

Comment pourrais-je créer un de ces objets en fonction d'un chemin ou d'une URI du fichier? Le plus loin que j'ai, c'est la méthode [SBObject initWithProperties] mentionnée brièvement dans le guide SB, mais je n'ai aucune idée d'où aller à partir de là. Le AppleScript de base que je voudrais traduire en Objective-C est alors, de le mettre encore une autre façon:

set myFile to POSIX file 
    "/untitled folder/funneh/keyboardcat.mov" 

Répondre

1

Je ne suis pas sûr de SBObject, mais si vous voulez une façon FinderItem*, c'est vous pourriez prends en un.

NSString* pathString = [@"/untitled folder/funneh/keyboardcat.mov" stringByExpandingTildeInPath]; 
NSURL* theFileURL = [pathString fileURLWithPath:pathString]; 
FinderApplication* finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder"]; 
FinderItem * theItem = [[finder items] objectAtLocation: theFileURL]; 
+0

Je n'ai pas Xcode à portée de main ici, mais il ne ressemble la bonne idée. Merci beaucoup! – dmkc

2

Si vous voulez juste l'objet FinderItem alors le code de SLF fonctionnera si vous modifiez la ligne:

NSURL* theFileURL = [pathString fileURLWithPath:pathString]; 

à

NSURL* theFileURL = [NSURL fileURLWithPath:pathString]; 

Mais si vous voulez un chemin de style HFS je trouvé cet extrait.

NSString* path = [(NSString*)CFURLCopyFileSystemPath((CFURLRef)theFileURL, kCFURLHFSPathStyle) autorelease]; 
NSLog(@"path= %@",path); 

qui renvoie une chaîne de "Disque dur: dossier sans titre: funneh: keyboardcat.mov"

L'extrait peut être trouvé here.

+0

Pratique. Merci pour l'extrait! – dmkc

0

Après avoir lu une réponse liée AppleScript very detailed, j'ai décidé de rester avec appscript, ce qui a rendu les choses beaucoup plus facile:

FNApplication *finder = [[FNApplication alloc] initWithName:@"Finder.app"]; 
FNReference *ref = [[finder files] byName: @"https://stackoverflow.com/users/movies/kitteh.mov"];