2010-01-15 5 views
0

J'ai 3 pistes dans iTunes et exécuter cette procédure:Faux résultat AppleScript à Cocoa

-(IBAction)reloadButtonClick:(id)sender; 
    { 
     NSAppleScript *script ; 
     NSString *source ; 
     NSString *result; 
     NSDictionary *errorDic ; 
     NSAppleEventDescriptor *ed; 
      int total; 

     source= @"tell application \"iTunes\" to get count of tracks of playlist 1"; 
     script = [[NSAppleScript alloc] initWithSource:source]; 
     ed = [script executeAndReturnError:&errorDic]; 
     if (ed == nil) 
     { 
      NSAlert *alert = [[NSAlert alloc]init]; 
      [alert setMessageText:@"Error Occurred"]; 
      [alert runModal]; 
      [alert release]; 
     } 
     result = [ed stringValue]; 
     total = [result intValue]; 

     NSAlert *alert = [[NSAlert alloc]init]; 
     [alert setMessageText:[NSString stringWithFormat:@"%d",total]]; 
     [alert runModal]; 
     [alert release]; 
    } 

Il retourne toujours 0 et l'erreur n'est pas produite. Mais, si j'exécute le script dans Script Editor, il renvoie 3.

Quelqu'un sait ce qui ne va pas? AppleScript à l'intérieur du cacao est-il instable?

Merci.

PS: ma version iTunes est 8.0.2 (20)

+0

Je suis désolé tout le monde, j'ai déclaré par erreur variable total comme double. C'était une variable globale. J'ai déclaré total comme int local pour cette question mais je ne l'ai pas essayé. Encore pardon. – Irwan

+0

Ça fonctionne bien. – Irwan

Répondre

0

Ce bit semble suspect; pourquoi n'utilisez-vous pas total = [ed intValue]:

result = [ed stringValue]; 
    total = [result intValue]; 
0

Je viens d'essayer votre code dans un outil de base. Je l'ai changé un peu:

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    NSAppleScript *script ; 
    NSString *source ; 
    NSString *result; 
    NSDictionary *errorDic ; 
    NSAppleEventDescriptor *ed; 
    int total; 

    source= @"tell application \"iTunes\" to get count of tracks of playlist 1"; 
    script = [[NSAppleScript alloc] initWithSource:source]; 
    ed = [script executeAndReturnError:&errorDic]; 
    if (ed == nil) 
    { 
     NSLog(@"Error Occurred"); 
    } 
    result = [ed stringValue]; 
    total = [result intValue]; 

    NSLog(@"result: %d", total); 

    [pool drain]; 
    return 0; 
} 

Avec iTunes 9.0.2 (sur Mac OS X 10.6.2). Cela a bien fonctionné. Cela m'a donné le résultat correct pour ma première playlist, "Library".

Questions connexes