我正在尝试编写一个简单的 Xcode cocoa-applescript 程序,该程序在文件夹的每个子文件夹上执行 bash 脚本,并在执行时显示进度条。
我有一个要链接到的NSProgressIndicator
设置,barStatus
并且NSTextField
要链接到lblStatus
以显示一些信息性文本:
property barStatus : missing value
property lblStatus : missing value
这是主要动作发生的循环:
tell application "Finder" to set subfolders to every folder of folder macPath
barStatus's setIndeterminate_(false)
barStatus's setDoubleValue_(0)
barStatus's setMaxValue_(count of subfolders)
repeat with eachFolder in subfolders
set posixPath to (POSIX path of (eachFolder as text)) as text
-- set text of progress indicator text
lblStatus's setStringValue_("Resizing '" & ( do shell script "basename \"" & (posixPath) & "\" | sed \"s/^.*_//\"" ) & "'...")
delay 0.5
-- do the shell script
do shell script "bash ~/.uploader/image.sh \"" & posixPath & "\""
-- step the indicator
barStatus's incrementBy_(1)
end repeat
lblStatus's setStringValue_("Done!")
一切似乎都正常工作,但用户界面有些小故障。进度条不仅会平滑增加,而且会在每一步消失并显示片刻,然后再次消失。中的文本lblStatus
确实会顺利更改。
当我从循环中删除时,事情会完全丢失delay
:在循环完成之前,不会进行 UI 更改(即使脚本运行正常)。因此,当循环完成时,进度条会消失并重新出现。
这是闪烁 UI 的youtube 视频。
我究竟做错了什么?如何让 xcode 顺利绘制进度条?
请注意,这是我第一次编写 Xcode 应用程序,而且我对 Applescript 的了解有些粗略。
编辑:
我发现调用处理相同函数的函数在从菜单项(或绑定到该菜单项的组合键)中调用时没有闪烁的 UI。