使用applescript cocoa objc在xcode中设置卷不起作用

时间:2013-03-21 18:31:23

标签: xcode cocoa applescript-objc

我在xcode 3.2中有一个AppleScript xcode项目,我正在尝试更改系统卷...但是它不起作用......它要么停止nstimer,要么根本不做任何事情......

有没有办法记录错误,以便我可以查明问题?

这是我的代码

set newVolume to 50
set volume output volume newVolume
textName's setStringValue_(currentVolume)
set currentVolume to newVolume
obv这是一个更加简洁的版本,但这实际上不起作用......它在NSTimer内部但是,即使不在NSTimer中它仍然不起作用... newVolume,currentVolume和textName都是声明...我需要为设定的音量线声明一些东西吗?

1 个答案:

答案 0 :(得分:1)

因此,您的实际问题只是如何从AppleScriptObjC记录错误:

AppleScriptObjC会将脚本中抛出的任何错误记录到控制台 - 只需查看Xcode的底部窗格即可。例如,在你的情况下,你应该看到类似“«script»不理解«aevtstvl»消息。”(这不是很清楚,但它告诉你你的脚本发送了一个set volume命令一个脚本对象,它没有处理程序。)如果你想自己捕获并记录错误,你可以将麻烦的部分放在try / on error块中,并自己处理它在错误处理程序中。

如果您感觉额外好奇,也可以打开NSScriptingDebugLogLevel首选项,如下所示:

defaults write com.me.myapp NSScriptingDebugLogLevel 1

... AppleScriptObjC将记录有关通过网桥发送的每条消息的信息。 (将其设置为0或使用defaults delete将其关闭。)

这是错误记录。现在,你实际上没有问过什么,但无论如何我都要回答,“我如何修复我的set volume命令?”

简短版:添加tell current application to

tell current application to set volume output volume 50

是的,“新”音量参数的范围是0到100.旧的兼容性从0到7.(为什么?旧的控制面板音量滑块有8档。)

长版:

默认直接参数与set volume处理它之间存在不良交互。当使用AppleScriptObjC时,“it”,因此默认的直接参数,除非你另有说明,是当前脚本,并且set volume扼杀了它。你可以通过tell current application to来强迫“它”成为一无是处。 (或者,您可以使用旧式表单set volume x为其指定显式直接参数,其中x是0到7之间的实数。但是,这与您从中获得的数字不匹配get volume settings,只允许您设置输出音量,并且不允许您正确设置“静音”等内容。)

顺便说一句,如果您的AppleScriptObjC项目足够简单(特别是,如果您不需要任何界面),您可以直接在AppleScript编辑器中编写它:选择文件>模板新增> Cocoa-AppleScript Applet,使用普通的AppleScript on runon open处理程序,除了你现在也可以从Cocoa调用任何东西。