2

2、3 日前、Apple は iTunes の新しいアップデートを導入しました。新しいミニプレーヤー、新しいプレーヤーのタイム バーなどです。しかし、私はそれに新しい問題を見つけました。これが私の問題です:

昔、iTunes.hコンソールアプリで次の行を入力してファイルを作成しました

sdef /アプリケーション/iTunes.app | sdp -fh --basename "iTunes"

これは、iTunes からデータを取得するために使用してきたファイルですScriptingBridge。しかし、現在、新しい更新により[iTunes playerPosition]、最新バージョンでは通話が正しく機能しなくなりました (古いバージョンではまだ完全に機能します)。これで、プレーヤーの位置がそうでなくても、NSInteger呼び出して得られるは常に 3 (秒、0:03) になります。だから、ファイルをもう一度生成すればうまくいく かもしれないと思いました。そして、はい、私は正しかったです!それはうまく機能しますが、古いバージョンでは壊れており、出力は常に 0 (秒、0:00) です。 これを回避して、古いバージョンと新しいバージョンの両方で機能する方法はありますか? ありがとうございました!注: iTunes を更新している場合は、Significator for iTunes をダウンロードしてみてください。playerPosition
iTunes.h[iTunes playerPosition]




Mac App Store で、私が話していることを確認してください。

4

1 に答える 1

4

2 つのファイルの情報に基づいて、.h戻ってくるデータを解釈する方法を理解するために、iTunes のバージョンに注意を払う必要があります。特に、info.plistiTunes バンドルの のビルド番号を確認し、それに基づいて、 でビルドした 2 つのクラス インターフェイスのいずれかを使用する必要がありますsdp。古いファイルを取得してクラスを取り出し、バージョン番号が追加された名前に変更することをお勧めします。これは、作業している iTunes のバージョンに基づいてメソッドを呼び出す前に、オブジェクト ポインターをキャストする必要があるためです。と。

したがって、 と があると仮定するITunesObjectProxyITunesObjectProxy_old、次を使用します。

double progress;
if (newer)
    progress = [iTunes playerPosition ];
else
    progress = (double)[(ITunesProxyObject_old *)iTunes playerPosition ];

そうすれば、double と int が正しく処理されるようになります。明らかに、オブジェクトとクラスの特定の名前は異なる可能性があり、iTunes.app のバージョンを判断するケースはあなたに任せますが、それはInfo.plist.

于 2013-05-19T20:50:32.053 に答える