我正在xcode 4中创建一个applescript应用程序,并且正在寻求一些指导。我已经做了很多阅读和搜索互联网,但找不到我要找的答案。我有一个带有文本框和按钮的主窗口。我希望能够将hostname123替换为文本框中的文本,以便命令为:do shell script“sudo scutil --set HostName”& [文本框的价值]。我已设置按钮事件,以便在单击时执行该命令。有人可以协助获取文本框的值,以便可以在命令中使用它吗?
on ButtonHandlerVolumeSetting0_(sender)
do shell script "sudo scutil --set HostName hostname123"
end ButtonHandlerVolumeSetting0_
答案 0 :(得分:0)
首先,我假设它位于AppleScriptObjC
,而不是较早的AppleScript Studio
。
首先,您需要使AppleScript等效于IBOutlet
,这是一个引用文本字段并允许Objective-C代码(或AppleScript)与之通信的实例变量(或属性)。在AppleScript脚本的顶部,添加如下所示的行:
script MDAppDelegate
property parent : class "NSObject"
property hostNameTextField : missing value -- add this line
然后,您需要按住 - 从nib文件中的脚本实例拖动到窗口中的文本字段,以“连接”此插座。
[更新]:从您收到的错误消息中,听起来您没有在nib文件中正确设置此hostNameTextField
连接。
下图中显示的nib文件中的MDAppDelegate
蓝色立方体图标表示将在加载该nib文件时在运行时创建的AppleScript脚本的实例。您可能已经正确地从按钮到蓝色AppleScript多维数据集的“连接”,这指定当您单击按钮时,它应该调用ButtonHandlerVolumeSetting0_()
函数(也称为AppleScript处理程序)。您现在需要选择您的蓝色AppleScript多维数据集实例,如下图所示,然后右键单击(或按住Control键单击)并从蓝色多维数据集拖动到输入文本字段,如我所示。
当您松开鼠标按钮时,它应显示一个黑色弹出式面板,其中包含可以“连接”到文本字段的可能属性。选择hostNameTextField
。
然后,当您选择蓝色AppleScript多维数据集时,在右侧实用程序区域的“连接”检查器中,您可以看到AppleScript脚本的连接。在Outlets
下,您会看到hostNameTextField
商店,在Received Actions
下,您会看到ButtonHandlerVolumeSetting0_()
。
通过在nib文件中建立此连接,将hostNameTextField
属性设置为AppleScript中的初始值missing value
(AppleScript等效于Objective-C的nil
) ,在运行时,hostNameTextField
的值将设置为您指定的NSTextField
。这将允许脚本与存档到nib文件中的对象层次结构之间的通信。
[END OF UPDATE]
NSTextField
从其超类NSControl
继承名为stringValue
的方法。此方法将文本字段的内容作为NSString
(等同于AppleScript string
)返回。因此,在按钮单击处理程序中,您可以按如下方式获取字符串值:
on ButtonHandlerVolumeSetting0_(sender)
set hostName to hostNameTextField's stringValue()
do shell script ("/usr/sbin/scutil --set HostName " & hostName) with administrator privileges
end ButtonHandlerVolumeSetting0_
使用do shell script
时,通常最好省略脚本本身的任何sudo
,而是添加with administrator privileges
限定符。这表示AppleScript需要使用提升的权限运行脚本,它将处理显示标准身份验证对话框。