2012-11-30 49 views
0

我正在xcode 4中创建一个applescript应用程序,并要求提供一些指导。我做了大量的阅读和搜索互联网,但无法找到我正在寻找的答案。我有一个带有文本框和按钮的主窗口。我希望能够用hostname123替换文本框中的文本,以便该命令是:执行shell脚本“sudo scutil --set HostName”& [文本框的值]。我设置了按钮事件,以便在点击时执行该命令。有人可以帮助获取文本框的值,以便它可以在命令中使用吗?xcode4获取文本框的值

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

我已经做了大量的研究。我不只是想在这里freeload :) – user1582375

回答

0

首先,我假定这是AppleScriptObjC,而不是老AppleScript Studio

首先,你需要做的AppleScript相当于一个IBOutlet,这是一个实例变量(或属性)的引用文本字段,并允许Objective-C代码(或AppleScript的)与之通信。在窗口从笔尖文件文本字段脚本实例

script MDAppDelegate 
    property parent : class "NSObject" 

    property hostNameTextField : missing value -- add this line 

你会再想要控制拖动到“:对你的AppleScript脚本的顶部,添加一行以下连接“这个插座。

[更新]:从您收到的错误消息中,听起来您没有在nib文件中正确设置此hostNameTextField连接。

MDAppDelegate下图中显示的nib文件中的蓝色立方体图标表示将在加载该nib文件时在运行时创建的AppleScript脚本实例。您可能已经将您的按钮与“AppleScript”多维数据集的“连接”正确连接起来,该连接指定当您单击该按钮时,它应该调用ButtonHandlerVolumeSetting0_()函数(又名AppleScript处理程序)。您现在需要选择蓝色AppleScript多维数据集实例,如下图所示,然后右键单击(或按住Control键并单击),然后从蓝色多维数据集拖到您输入的文本字段中,如我所示。

enter image description here

当你让了鼠标按钮,它应该显示有可能性质的黑色弹出面板,您可以“挂钩”的文本字段。选择hostNameTextField

enter image description here

之后,当您选择蓝色的AppleScript立方体,在右实用区域的连接检查,你可以看到AppleScript脚本的连接。在Outlets下,您会看到hostNameTextField插座,在Received Actions下,您会看到ButtonHandlerVolumeSetting0_()

虽然hostNameTextField属性被设置为的missing value初始值在AppleScript的,(所述的AppleScript等效Objective-C的nil的),通过使在笔尖文件这方面,在运行时,的hostNameTextField的值将被设定到您指定的NSTextField。这将允许脚本和归档到nib文件中的对象层次结构之间的通信。

[UPDATE OF END]

NSTextField一个继承名为从其超NSControlstringValue方法。此方法返回文本字段的内容,如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需要使用提升的权限运行脚本,并且它将处理显示标准身份验证对话框。

+0

获取以下错误:[AppDelegate InstallButton:]:无法获取缺少值的stringValue。 – user1582375

+0

@ user1582375:解决您遇到的问题的更新答案.... – NSGod