Как мне интерпретировать запись, возвращенную как результат NSAppleScript

Я запускаю яблочный скрипт из приложения Objective-C, используя NSAppleScript метод executeAndReturnError. Это возвращает объект NSAppleEventDescriptor, содержащий результат сценария. Мой скрипт возвращает запись appleScript. Как интерпретировать запись в target-c? Например, если возвращаемая запись скрипта - { name:"Jakob", phone:"12345678" }, как мне получить строку "Jakob" в свойстве name?

1 ответ

Решение

Вот метод для преобразования записи в словарь. Обратите внимание, что я не пробовал это, но это должно работать.

Кроме того, ваш ключ "имя" не очень подходит для использования в applecript, потому что "имя" имеет иное значение для appleScript. У меня часто были проблемы с использованием этого в записи. Я бы предложил изменить что-то вроде "theName" или использовать его в барах |name|.

-(NSDictionary*)recordToDictionary:(NSAppleEventDescriptor*)theDescriptor {
    NSUInteger j,count;
    id thisDescriptor = [theDescriptor descriptorAtIndex:1];
    count = [thisDescriptor numberOfItems];
    NSMutableDictionary* thisDictionary = [NSMutableDictionary dictionaryWithCapacity:count/2];
    for (j=0; j<count; j=j+2) {
        NSString* theKey = [[thisDescriptor descriptorAtIndex:(j+1)] stringValue];
        NSString* theVal = [[thisDescriptor descriptorAtIndex:(j+2)] stringValue];
        [thisDictionary addEntriesFromDictionary:[NSDictionary dictionaryWithObject:theVal forKey:theKey]];
    }
    return (NSDictionary*)[[thisDictionary retain] autorelease];
}

Конечно, после записи в формате словаря вы можете просто использовать метод экземпляра "valueForKey:" в словаре, чтобы получить "Jacob".

Другие вопросы по тегам