使Cocoa应用程序响应简单的AppleScript命令

使Cocoa应用程序响应简单的AppleScript命令,第1张

概述我正在尝试为 Cocoa应用程序添加一个简单的AppleScript支持.应用程序定期执行检查,我只是希望能够告诉它按需执行它. 我试图遵循SimpleScriptingVerbs Apple的例子. 我已经将NSScriptCommand子类化如下: 标题: #import <Cocoa/Cocoa.h>@interface rdrNotifierUpdateCommand : NSScri 我正在尝试为 Cocoa应用程序添加一个简单的AppleScript支持.应用程序定期执行检查,我只是希望能够告诉它按需执行它.

我试图遵循SimpleScriptingVerbs Apple的例子.

我已经将NSScriptCommand子类化如下:

标题:

#import <Cocoa/Cocoa.h>@interface rdrNotifIErUpdateCommand : NSScriptCommand {}-(ID)performDefaultImplementation;@end

执行:

#import "rdrNotifIErUpdateCommand.h"#import "rdrNotifIErAppDelegate.h"@implementation rdrNotifIErUpdateCommand-(ID)performDefaultImplementation {  NSLog(@"Works at last");  [((rdrNotifIErAppDelegate *)[[NSApplication sharedApplication] delegate])   checkForNewItems];  // This just fires the timer  return nil;}@end

我的.sdef文件如下(问题似乎存在,但我找不到):

<?xml version="1.0" enCoding="UTF-8"?><!DOCTYPE dictionary SYstem "file://localhost/System/library/DTDs/sdef.dtd"><dictionary title="Dictionary" xmlns:xi="http://www.w3.org/2003/XInclude">    <xi:include href="file:///System/library/ScriptingDeFinitions/CocoaStandard.sdef" xpointer="xpointer(/dictionary/suite)"/>    <suite name="rdrNotifIEr Suite" code="rdrN" description="rdrNotifIEr application specific scripting facilitIEs.">        <command name="do update" code="rdrNUpdt" description="Check for new items">            <cocoa />        </command>    </suite></dictionary>

Info.pList已正确设置.

但是,当我尝试在AppleScript编辑器中运行以下脚本时:

tell application "rdrNotifIEr"    do updateend tell

我收到一个关于变量“update”未定义的错误.

我可以从AppleScript编辑器打开我的应用程序的字典(即它已成功注册).

编辑:找到解决方案

问题确实在sdef文件中:我没有指定应用程序可以回复命令.我的最终定义如下(Obj-C代码不变):

<?xml version="1.0" enCoding="UTF-8"?><!DOCTYPE dictionary SYstem "file://localhost/System/library/DTDs/sdef.dtd"><dictionary title="Dictionary" xmlns:xi="http://www.w3.org/2003/XInclude">  <!-- I have removed the standard suite as the application does not open,print... -->  <suite name="rdrNotifIEr Suite" code="rdrN" description="rdrNotifIEr application specific scripting facilitIEs.">    <command name="do update" code="rdrNUpdt" description="Check for new items">      <cocoa />    </command>    <class name="application" code="Capp">      <cocoa />      <responds-to name="do update">        <!-- Note you need to specify a method here,although it is blank -->        <cocoa method=""/>      </responds-to>    </class>  </suite></dictionary>

任何改进/提示/批评仍然是受欢迎的.

解决方法 感谢您为应用添加Applecript支持!只是一个快速的观察/批评:当构建术语时,通过一切手段包括空格,但如果该术语采用“动词名词”的形式(如“更新”),如果名词“更新”不正确,appleScripters将会受到激怒建模对象,如果’do’不是正确的命令.

我认为’do’对于命令名称来说是一个糟糕的选择,因为它非常含糊.使用’update’作为命令有什么问题? (即将其视为动词).

Apple自己的技术说明2106(目前为here)对此问题进行了详细介绍,如果您希望取悦AppleScripting用户社区,请务必阅读和摘要.

Apple本身并没有超越愚蠢的术语选择,例如updatepodcast和updateallpodcasts(在iTunes中).这些是愚蠢的选择,因为(根据tn2106)它们不包含空格,并且因为更好的选择是拥有一个合适的播客类,然后有一个更新命令,可用于单个播客,所有播客,或特定选择一组播客.

总结

以上是内存溢出为你收集整理的使Cocoa应用程序响应简单的AppleScript命令全部内容,希望文章能够帮你解决使Cocoa应用程序响应简单的AppleScript命令所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存