2

iTunes Scripting Bridgeインターフェイスを使用して、persistentIDで特定のiTunesTrackをフェッチする必要があります。sdp / sdefで生成されたヘッダーファイルを詳しく調べましたが、既存のインターフェイスには、パラメータに基づいてトラックに対してあらゆる種類のクエリを実行するためのメソッドがないようです。私が持っていた次のアイデアは、すべてのトラックを列挙して、それぞれが一致するかどうかを調べることでした。

これは遅いという意味です。ターゲットライブラリが大きいほど、パフォーマンスが低下します。スクリプトブリッジから返されたすべてのトラックを一度に1つずつ調べる必要のない、この問題に対する実証済みの解決策を誰かが持っているのではないかと思います。

ScriptingBridgeを介してiTunesで特定のトラックを取得する際に、Arr MiHardiesは解決策を考え出し、それを投稿すると述べていますが、どうやら、彼はそれを回避できなかったようです。

4

1 に答える 1

0

秘訣は、iTunesライブラリ全体を配列として取得し、CocoaのNSPredicateフィルタリングを使用して必要なものを見つけることです。

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
SBElementArray *iTunesSources = [iTunes sources];
iTunesSource *library;
for (iTunesSource *thisSource in iTunesSources) {
    if ([thisSource kind] == iTunesESrcLibrary) {
        library = thisSource;
        break;
    }
}
SBElementArray *libraryPlaylists = [library libraryPlaylists];
iTunesLibraryPlaylist *libraryPlaylist = [libraryPlaylists objectAtIndex:0];
SBElementArray *musicTracks = [self.libraryPlaylist fileTracks];    
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"persistentID == %@", persistentID];
[musicTracks filterUsingPredicate:predicate];

一般に、Scripting Bridgeメソッドでは、データを取得するためにそれらを使用してから、他のすべてに通常のCocoaメソッドを使用することをお勧めします。

于 2012-03-09T19:38:07.430 に答える