xcode4获取文本框的值

时间:2012-11-30 02:26:32

标签: objective-c xcode cocoa xcode4 applescript

我正在xcode 4中创建一个applescript应用程序,并且正在寻求一些指导。我已经做了很多阅读和搜索互联网,但找不到我要找的答案。我有一个带有文本框和按钮的主窗口。我希望能够将hostname123替换为文本框中的文本,以便命令为:do shell script“sudo scutil --set HostName”& [文本框的价值]。我已设置按钮事件,以便在单击时执行该命令。有人可以协助获取文本框的值,以便可以在命令中使用它吗?

on ButtonHandlerVolumeSetting0_(sender)
    do shell script "sudo scutil --set HostName hostname123" 
end ButtonHandlerVolumeSetting0_

1 个答案:

答案 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键单击)并从蓝色多维数据集拖动到输入文本字段,如我所示。

enter image description here

当您松开鼠标按钮时,它应显示一个黑色弹出式面板,其中包含可以“连接”到文本字段的可能属性。选择hostNameTextField

enter image description here

然后,当您选择蓝色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需要使用提升的权限运行脚本,它将处理显示标准身份验证对话框。