【问题标题】:How do I interprete a record returned as a NSAppleScript result如何解释作为 NSAppleScript 结果返回的记录
【发布时间】:2012-11-01 15:49:16
【问题描述】:

我使用 NSAppleScript 的 executeAndReturnError 方法从一个 Objective-C 应用程序运行一个 AppleScript。这将返回一个包含脚本结果的 NSAppleEventDescriptor 对象。我的脚本返回一个 applescript 记录。如何解释objective-c中的记录?例如,如果返回的脚本记录是 { name:"Jakob", phone:"12345678" } 如何在 name 属性中获取字符串“Jakob”?

【问题讨论】:

    标签: objective-c applescript appleevents applescript-objc


    【解决方案1】:

    这是一种将记录转换为字典的方法。请注意,我没有尝试过,但它应该可以工作。

    此外,您的“name”键在 applescript 中不是一个好的键,因为“name”对 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”。

    【讨论】:

    • 它有效,谢谢!你在哪里可以找到关于这些东西的文档?
    • 顺便说一句:我想最后一行中的保留/自动释放并不是真正必要的,因为 dictionaryWithCapacity 已经返回一个自动释放对象 - ?
    • 我很高兴它成功了。我只是通过谷歌搜索和实验学到了这些东西。我在我的代码中使用了很多 applescript 的东西,所以我不得不学习它。最后一个保留/自动释放的东西只是一种预防措施。有时,当您从方法中返回自动释放的对象时,它们会过早释放,因此这只是确保该值保持更长的时间,以便在您完成之前不会释放它。这不是必需的,只是一种预防措施。请注意,这本词典也是自动发布的,因此您无需在代码中发布它...除非您当然保留它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多