2010-01-15 59 views
0

我在iTunes 3個軌道和運行這個程序:假AppleScript的結果可可

-(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]; 
    } 

它總是返回0,並且不發生錯誤。但是,如果我在腳本編輯器中執行腳本,它將返回3.

任何人都知道什麼是錯的? AppleScript裏面可可不穩定?

謝謝。

PS:我的iTunes版本是8.0.2(20)

+0

我很抱歉大家,我錯誤地聲明變量總數爲雙倍。這是一個全球變量。我將這個問題的總體聲明爲local int,但沒有嘗試。再次抱歉。 – Irwan 2010-01-19 01:44:41

+0

它工作正常。 – Irwan 2010-01-19 01:45:07

回答

0

這一點看起來很可疑;爲什麼你不使用total = [ed intValue]:

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

我剛剛在基礎工具中試過你的代碼。我改變了一點:

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; 
} 

使用iTunes 9.0.2(在Mac OS X 10.6.2上)。它運行良好。它給了我第一個播放列表「圖書館」的正確結果。