Je m'arrache les cheveux en essayant de créer un nouvel album à partir d'une application Cocoa. Dans AppleScript est une procédure simple et agréable:Création d'albums iPhoto à l'aide de Cocoa Scripting Bridge
tell application "iPhoto"
new album name "Album"
end tell
Mais je ne peux pas travailler comment cela se fait dans Cocoa via le pont de script. J'ai essayé ceci:
iPhotoApplication *iPhoto = [SBApplication applicationWithBundleIdentifier:@"com.apple.iPhoto"];
iPhotoAlbum *newAlbum = [[[[iPhoto classForScriptingClass:@"album"] alloc] initWithProperties:[NSDictionary dictionaryWithObject:@"Album" forKey:@"name"]] autorelease];
[[iPhoto albums] addObject:newAlbum];
Mais cela n'a eu aucun effet.
Aidez s'il vous plaît!
Merci pour votre réponse. Il semble que sdp ait en fait généré les fichiers d'en-tête mal - probablement parce que "new album" n'est pas dans une classe. Je vais jeter un oeil à la façon dont appscript le fait dans les coulisses: D – robinjam
Le dictionnaire d'iPhoto est mal conçu, mais la structure et l'utilisation de la commande 'new album' sont parfaitement valides; ditto iTune commande 'play', qui est un autre exemple légitime. sdp et SB ne traduisent pas de la même manière les commandes définies par le dictionnaire d'application dans les méthodes ObjC. C'est un bug vraiment élémentaire. – has
Appscript imite à peu près le fonctionnement d'AppleScript, ajusté en fonction des capacités du langage hôte. Puisque les méthodes ObjC ne font pas d'arguments optionnels, elle utilise une série d'appels de méthode chaînés pour créer la commande ('-newAlbum'), emballe chaque paramètre (' -name: '), et finalement l'envoie (' -send') . C'est très similaire à la façon dont vous construisez et envoyez des événements Apple en utilisant les API Carbon C originales ('AECreateAppleEvent',' AEPutParamDesc', 'AESendMessage') et mappe plus ou moins directement sur ces appels. – has