Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Can';t将<&书信电报;脚本>&燃气轮机;在Applescript中键入字符串_Macos_Applescript - Fatal编程技术网

Macos Can';t将<&书信电报;脚本>&燃气轮机;在Applescript中键入字符串

Macos Can';t将<&书信电报;脚本>&燃气轮机;在Applescript中键入字符串,macos,applescript,Macos,Applescript,在将脚本导出为应用程序后,出现此错误。在脚本编辑器中运行脚本时,它工作正常。但是当运行应用程序时,我得到了他的错误 无法将的项1转换为字符串类型 这是我的代码 set deptList to {"basketball", "football", "golf", "compliance"} (choose from list deptList) if result is not false then set dept_name to item 1 as string else d

在将脚本导出为应用程序后,出现此错误。在脚本编辑器中运行脚本时,它工作正常。但是当运行应用程序时,我得到了他的错误

无法将的项1转换为字符串类型

这是我的代码

set deptList to {"basketball", "football", "golf", "compliance"}

(choose from list deptList)
if result is not false then
    set dept_name to item 1 as string
else
    display dialog "Operation Cancelled"
    error number -128
尝试使用:

set dept_name to text of result

Applescript知道它已经是一个字符串(或文本),所以我们只需要告诉它将变量
dept\u name
设置为
结果的
text

tell application "Finder"
    set deptList to {"basketball", "football", "golf", "compliance"}

    (choose from list deptList)
    if result is not false then
        set dept_name to text of result
    else
        display dialog "Operation Cancelled"
        error number -128
    end if
    display dialog dept_name
end tell

从列表中选择与查找器无关。此外,没有结果文本。返回一个结果文本,但该文本“仅当提供了“默认答案”时才显示”对话框。最后,您应该避免完全使用“result”,并将响应分配给变量

set deptList to {"basketball", "football", "golf", "compliance"}
set dept_name to choose from list deptList with title "Insert your Title" with prompt "Insert your prompt" without multiple selections allowed

if dept_name is false then
    error number -128
else
    set dept_name to first item of dept_name
end if
下面是一个使用返回的结果文本的示例:

display dialog "Enter text" default answer "My text" buttons {"Cancel", "OK"} default button 2
return the result

你的假设太离谱了。查看-“语句的结果是在执行语句时生成的值(如果有)。例如,执行语句3+4会生成值7。将myText设置为“键盘”的语句的结果是文本对象“键盘”“。结果可以是任何类别。AppleScript将结果存储在全局可用的属性结果中,如“AppleScript常量”中所述。此外,关于
从列表中选择也有错误。“从列表中选择(动词)从列表中选择一个或多个项目(从StandardAdditions.osax中定义的用户交互套件中)”。你需要记住这是Applescript,它在大多数情况下都是宽容的-有多种方法可以获得相同的结果,不管你认为它是否正确。回到不必要的告诉应用程序块。双方都是对的,或者是错的。您可以在另一个应用程序的上下文中进行用户交互,这是一个非常漂亮的特性。然而,许多书籍、教程和代码片段似乎经常将此放在告诉应用程序“查找器”块中。这一部分是不必要的,如果不需要,那就是糟糕的编程,因为用户交互处于错误的上下文中。结果是代码正常工作,但在代码和使用方面都很笨拙。但是当你为Finder编写脚本时,在Finder中进行用户交互也是很正常的。结果常量可以是任何类型的对象。对于选择列表的结果,它要么是列表,要么是布尔值false。在这种情况下,结果文本将创建一个包含类文本列表中所有项的新列表。Adayzdone就在这里,代码可以工作,但这并不意味着它是好的编程。当查看约书亚的代码时,他想要得到结果的第一项,而你要给他所有的结果。但是约书亚忘了告诉我他想要的第一个物体是什么。结果的第1项可以解决他的问题。“Applescript知道它已经是字符串(或文本)”——这是不正确的:
choose from list
返回文本值列表。说出
text of
只会返回另一个列表,其中包含第一个列表中作为文本值的每一项。(可能您认为
是文本
,它将文本列表强制为文本值。)最清晰正确的解决方案是将
从列表中选择
的结果分配给一个变量(
将userChoice设置为从列表部门列表中选择
),以便您可以随意使用它,然后使用
将部门名称设置为userChoice的第1项
从列表中提取文本值。@foo,我想你误解了我所指的
“string”
的上下文。我指的是
“结果”
,而不是
“列表”
。不,我理解得很好<代码>从列表中选择总是返回
false
或文本列表。该值临时绑定到
结果
变量(最好避免语言错误特性本身)。然后,您的
结果文本
引用检索此列表并将其所有文本项作为新列表获取,例如{“basketball”}->{“basketball”}
文本。因此,分配给部门名称的值仍然是一个文本列表。这对您来说并不明显,因为
显示对话框
命令会在显示之前自动将其强制为文本,但将其替换为
返回部门名称
,您将看到。正如我、DJ和foo指出的,“结果文本”是不正确的。仅仅因为AppleScript可以原谅错误并不意味着未来的读者应该使用上面的代码作为参考。