récupérer dans Cocoa le résultat d'un applescript

NicololoNicololo Membre
06:50 modifié dans API AppKit #1
Bonjour,

J'aurais besoin de pouvoir récupérer dans Cocoa l'illustration d'iTunes.

J'ai écrit (vite fait) un applescript pour récupérer l'illustration dans iTunes :

set theControllerSelection to selection_iTunes()<br />tell theControllerSelection to update_info_selection()<br /><br />set theIllustration to return_illustration() of theControllerSelection<br /><br />on selection_iTunes()<br />  script<br />            <br />          property songs_list : {}<br />          property firstIllustrationFound : null<br />            <br />          on return_list()<br />                  return songs_list<br />         end return_list<br />           <br />          on return_illustration()<br />                  return firstIllustrationFound<br />             end return_illustration<br />           <br />          on update_info_selection()<br />                        <br />                  tell application &quot;iTunes&quot;<br />                               -- récupération de la liste des chansons<br />                          set iTunes_list to the selection of the browser window 1<br />                          set my songs_list to every item of iTunes_list<br />                    end tell<br />                  <br />                  set iTunesArtwork to get_iTunes_illustration()<br />                    set my firstIllustrationFound to iTunesArtwork<br />                    <br />          end update_info_selection<br />         <br />          on get_iTunes_illustration()<br />                      tell application &quot;iTunes&quot;<br />                               repeat with i in my songs_list<br />                                    try<br />                                               set itunes_artwork to artwork 1 of i<br />                                              if ((format of itunes_artwork) as string) contains &quot;PNG&quot; or ((format of itunes_artwork) as string) contains &quot;JPEG&quot; then<br />                                                       -- une illustration a été trouvée<br />                                                 set illustration_data to data of itunes_artwork<br />                                                   exit repeat<br />                                               else<br />                                                      set illustration_data to &quot;&quot;<br />                                             end if<br />                                    on error<br />                                          set illustration_data to &quot;&quot;<br />                                     end try<br />                           end repeat<br />                        end tell<br />                  return illustration_data<br />          end get_iTunes_illustration<br />               <br />  end script<br />end selection_iTunes<br />


J'ai créé ensuite un projet Cocoa et une méthode pour récupérer l'illustration dans Cocoa et la mettre dans une vue.

code Cocoa

- (IBAction)loadImage:(id)sender<br />{<br />       illustration = [[NSImage alloc] initWithData: [script executeAndReturnError:nil]];<br />       [viewIllustration setImage:illustration];<br />}<br />


Mais là  pas moyen d'exploiter les data du script, j'obtiens des messages d'erreur :

2004-10-08 22:22:34.483 testImage[1106] *** -[NSAppleEventDescriptor bytes]: selector not recognized
2004-10-08 22:22:34.520 testImage[1106] *** -[NSAppleEventDescriptor bytes]: selector not recognized


Je ne connais pas grand chose à  Cocoa mais j'ai dû oublier un truc dans ma méthode, mais je ne sais pas quoi.

Merci d'avance à  ceux qui se pencheront sur mon problème car là  je sèche.

Nicolas

Réponses

  • BruBru Membre
    06:50 modifié #2
    Puisque tu utilises la méthode executeAndReturnError:, c'est que script est un objet de type NSAppleScript.

    Or cette méthode retourne un objet NSAppleEventDescriptor, alors que initWithData: de NSImage demande une NSData.

    Essaie de remplacer ta première ligne dans l'action loadImage: par :
    <br />illustration=[[NSImage alloc] initWithData:[[script executeAndReturnError:nil] data]];<br />
    


    .
  • NicololoNicololo Membre
    06:50 modifié #3
    dans 1097353640:

    Puisque tu utilises la méthode executeAndReturnError:, c'est que script est un objet de type NSAppleScript.

    Or cette méthode retourne un objet NSAppleEventDescriptor, alors que initWithData: de NSImage demande une NSData.

    Essaie de remplacer ta première ligne dans l'action loadImage: par :
    <br />illustration=[[NSImage alloc] initWithData:[[script executeAndReturnError:nil] data]];<br />
    


    .


    merci, ça marche, du moins je n'ai plus d'erreurs. L'image ne s'affiche pas dans ma view mais je vais bien trouver. ;D

    je me doutais qu'il manquait le descripteur, j'avais essayé en mettant par hasard dataValue mais ça ne fonctionnait pas.

    merci beaucoup et peut-être à  plus.
Connectez-vous ou Inscrivez-vous pour répondre.