2

私はあなたがiTunesで聴いているものを監視するCocoaアプリに取り組んでおり、Mac OS 10.5以降をターゲットにしているので、ScriptingBridgeを使用することにしました。

アプリが現在のトラックをポーリングする時間に近すぎてiTunesを閉じようとすると、iTunesはすぐに再起動します。この動作を確実に防ぐ唯一の方法は、最初にアプリを終了してから、iTunesを終了することです。

EyeTunesに切り替えると問題は解決しますが、それはかなり古いコードベースであり、外部ライブラリなしでこれを達成できることを望んでいました。確かに私は再起動を引き起こしている何か間違ったことをしていますか?

ここにいくつかのサンプルコードがあります。このスニペットは、によってトリガーされ、数秒ごとに実行されますNSTimer

#import "iTunesBridge.h" // auto-generated according to Apple's docs

-(void)updateTrackInfo {
    iTunesApplication *iTunes = [[SBApplication alloc] initWithBundleIdentifier:@"com.apple.iTunes"];
    iTunesTrack *currentTrack = [iTunes currentTrack];
    // inspect currentTrack to determine what's being played...
    [iTunes release];
}

これはScriptingBridgeの既知の問題ですか、それとも間違って使用していますか?

4

2 に答える 2

3

これはScriptingBridgeの既知の問題ですか、それとも間違って使用していますか?

おそらく両方ですが、これに関するドキュメントは不明確です。

applicationWithBundleIdentifier:クラスメソッドは、アプリケーションが実行されていない場合にアプリケーションを起動しますが、ドキュメントにはinitWithBundleIdentifier:インスタンスメソッドについては記載されていません。

最も安全な方法は、NSRunningApplication(またはLeopard互換性の場合はProcess Manager)を使用して、実行中のiTunesプロセスを検索し、1つを選択して、そのプロセス識別子でターゲットにすることです。iTunesプロセスが見つからない場合は、もちろん、ターゲットにしようとしないでください(SBApplicationの作成と通信をスキップしてください)。

于 2010-04-22T03:22:04.323 に答える
1

リクエストを送信するまでにアプリケーションはすでに終了しているようですので、再起動します。

SBApplication applicationWithBundleIdentifier

動的スクリプトインターフェイスを使用していることを宣言するアプリケーションの場合、このメソッドは、アプリケーションがまだ実行されていない場合に起動します。

于 2010-04-22T03:20:34.120 に答える