フォルダーの各サブフォルダーで bash スクリプトを実行し、実行中にプログレスバーを表示する単純な Xcode cocoa-applescript プログラムを作成しようとしています。
私はいくつかの有益なテキストを表示するためにリンクさ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!")
すべてが正常に機能しているように見えますが、UI は多少グリッチです。プログレスバーはスムーズに増加するのではなく、各ステップで消えてしばらく表示された後、再び消えます。のテキストはlblStatus
スムーズに変更されます。
ループからを削除すると、物事が完全に失われdelay
ます。ループが終了するまで、(スクリプトが適切に実行されても) UI の変更は行われません。そのため、ループが完了すると、プログレスバーが消えて再び表示されます。
これは、ちらつきのある UI のYouTubeビデオです。
私は何を間違っていますか?xcodeでプログレスバーをスムーズに描画するにはどうすればよいですか?
Xcode アプリを作成するのはこれが初めてであり、Applescript に関する私の知識はやや大ざっぱであることに注意してください。
編集:
同じ関数を処理する関数を呼び出しても、メニュー項目から呼び出された場合 (またはそのメニュー項目にバインドされたキー コンボを使用した場合)、ちらつきのある UI がないことがわかりました。