QuickTime プレーヤーが一時停止されているか、Cocoa から再生されているかを確認しようとしています。Script Debugger と AppleScript Editor で次の小さな AppleScript を使用すると、期待どおりにtrue
orが返されます。false
tell application "QuickTime Player" to tell document 1 to return playing
ただし、Cocoa アプリの次のコード スニペットは機能しません。
NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to return playing";
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSDictionary *dict = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];
上記のコードを実行すると、デバッグ コンソールは次のようになります。
関連する場合、デバッガーの最後のステップ、つまり に値を割り当てるステップを実行するのに約 4 秒かかりますがdescriptor
、これは私には非常に長いようです。
@autorelease
ブロック内に上記のものだけを含む単純なコマンド ライン ツール アプリを作成しましたが、動作します。
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *source = @"tell application \"QuickTime Player\" to tell document 1 to get playing";
NSAppleScript *script = [[NSAppleScript alloc] initWithSource:source];
NSDictionary *dict = nil;
NSAppleEventDescriptor *descriptor = [script executeAndReturnError:&dict];
NSLog(@"%@", descriptor);
NSLog(@"%@", dict);
}
return 0;
}
出力 (QuickTime Player の実行時) は次のとおりです。
2014-05-17 11:48:07.255 Sandbox[52872:303] <NSAppleEventDescriptor: 'true'("true")>
2014-05-17 11:48:07.256 Sandbox[52872:303] (null)
Program ended with exit code: 0
デバッガーでサンドボックス コードをステップ実行すると、そのdescriptor
割り当てが 1 秒以内に実行されます。では、これが機能しない原因となっているアプリ プロジェクトの違いは何でしょうか?