• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Objective-CのNSTaskからAutomatorで作成したア)

Objective-CのNSTaskからAutomatorで作成したアプリを複数回実行するとフリーズするのですが、原因が分からないのでアドバイスをいただきたく書き込みさせていただきます。

このQ&Aのポイント
  • Objective-CのNSTaskからAutomatorで作成したアプリを複数回実行するとフリーズする問題について、解決方法を教えてください。
  • Objective-CのNSTaskからAutomatorで作成したアプリを連続実行するとアプリがフリーズする問題が発生しています。フリーズの原因と解決方法を教えてください。
  • Objective-CのNSTaskからAutomatorで作成したアプリを複数回実行するとフリーズしてしまう問題が発生しています。どなたか解決方法をご教示いただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • diszo
  • ベストアンサー率78% (32/41)
回答No.1

実際のものをみていないので、 原因特定は難しいのですが。 ソースを読ませていただいたところ、気になった点。 NSTaskでコマンド「open」を使用されていて [task waitUntilExit];で実行が終わるまで待つというように 書かれていますが、 ファイルに対して、開く命令しか送らないので、 コマンド自体は終わってしまって、 次の処理が走ってしまうのでSleepを入れたのかなと思いました。 #ここらへんが複数回呼ばれたときに悪さをしていないかなと感じました。 #Automatorアプリの起動から終了まで必ず6秒以内なのかとか、その確証はあるのかなど そこで、 コマンドで、 「Automatorアプリのパス/Contents/MacOS/Automatorアプリ」を実行ファイルに指定することによって waitUntilExitでAutomatorアプリの動作をSleepなどで待たなくて済むかなと思いました。 #ターミナルで実際に適当なアプリを実行してみたら、アプリが起動して終了するまで #コマンドは終了していなかったので、使えるかなと思います。 以下のように書き換えてみたらどうでしょうか NSString *Command = [NSString stringWithFormat:@"Automatorアプリのパス/Contents/MacOS/アプリ名"]; NSArray *argumets = [NSArray arrayWithObjects: [NSString stringWithFormat:@"%@",urlfilePath], nil]; ご参考にしていただければ幸いです。

S202
質問者

お礼

お礼が遅くなってしまいすいません。 ご指摘の方法で実行すれば正常に処理ができるようになりました。 しかも、Sleepしないので処理も早くなりました。 本当にありがとうございました。

その他の回答 (1)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

質問1: Automatorのアプリケーションを起動するのに、NSWorkspaceを使わずに、NSTaskを使う理由はなんでしょうか? 質問2: Automatorは、複数の項目に対して、一括して高速に処理を行うのが、特長です。それなのに、1項目に対して処理して、アプリケーションを終了して、また1項目に対して処理して、アプリケーションを終了して……を繰り返す理由はなんでしょうか?

S202
質問者

お礼

ご指摘ありがとうございます。