Ложный результат Applescript в Какао - PullRequest
0 голосов
/ 15 января 2010

У меня есть 3 трека в iTunes, и я запускаю эту процедуру:

   -(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)

Ответы [ 2 ]

0 голосов
/ 16 января 2010

Я только что попробовал ваш код в фундаментальном инструменте. Я немного изменил это:

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). Работало нормально. Это дало мне правильный результат для моего первого плейлиста "Библиотека".

0 голосов
/ 15 января 2010

Этот бит выглядит подозрительным; почему вы не используете total = [ed intValue]:

    result = [ed stringValue];
    total = [result intValue]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...