首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从NSScriptCommand子类的performDefaultImplementation返回对象列表?

如何从NSScriptCommand子类的performDefaultImplementation返回对象列表?
EN

Stack Overflow用户
提问于 2013-12-18 07:28:15
回答 1查看 404关注 0票数 2

我在Cocoa应用程序中添加了动词优先的AppleScript命令。sdef命令定义指示该命令返回文本字符串列表:

代码语言:javascript
复制
<command name="list names" code="ABCDLstN" description="return a list of names">
    <cocoa class="ListNamesCommand"/>
    <result type="text" list="yes" description="some names"/>
</command>

ListNamesCommand类的performDefaultImplementation方法返回NSStringNSArray

代码语言:javascript
复制
- (id)performDefaultImplementation {
    return @[@"name 1", @"name 2"];
}

结果是一个例外:

代码语言:javascript
复制
2013-12-17 17:22:37.474 ListNames[31907:303] Error while returning the result of a script command: the result object...
(
    name1,
    name2
)
...could not be converted to an Apple event descriptor of type 'text'. This instance of the class '__NSArrayI' doesn't respond to -scriptingTextDescriptor messages.

workaround是更改sdef以将结果类型指定为any而不是text,并返回NSAppleEventDescriptor而不是NSArray:

代码语言:javascript
复制
- (id)performDefaultImplementation {
    NSAppleEventDescriptor *list = [NSAppleEventDescriptor listDescriptor];
    [list insertDescriptor:[NSAppleEventDescriptor descriptorWithString:@"name 1"] atIndex:1];
    [list insertDescriptor:[NSAppleEventDescriptor descriptorWithString:@"name 2"] atIndex:2];

    return list;
}

但是,这有一个不幸的副作用,即将事件(在AppleScript编辑器字典查看器中)记录为返回任何类型。

有没有没有这个缺点的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2013-12-18 07:39:47

我认为当你定义命令时,类型应该是“文本列表”。我从来没看过关于"list=yes“的部分。我不是专家,但我会删除它。祝好运。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20646796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档