0

私には2つの状況があります。曲のトラックIDを指定して、評価を整数に設定します。2つ目は、トラックIDの配列が指定されていることを除いて同じです。ScriptingBridgeを使用して曲の名前に基づいてiTunesTrackオブジェクトを検索できることは知っていますが、トラックIDに基づいて取得する方法はありますか?次のようなもの:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSInteger *rating;
NSInteger *id;

if ( [iTunes isRunning] ) {
    iTunesTrack *track = [ iTunes trackForDatabaseID:id ];
    [ track setValue:rating forkey:@"rating" ];
}

2番目の状況では、トラックIDの配列を指定してiTunesTrackのSBElementArrayオブジェクトを取得する方法はありますか?何かのようなもの:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
NSArray *ids; //array of NSIntegers

if ( [iTunes isRunning] ) {
    SBElementArray *tracks = [ iTunes tracksForDatabaseIDs:ids ];
    [ tracks setValue:rating forkey:@"rating" ];
}

これは、曲の名前に基づいてライブラリを繰り返し検索するよりも効率的だと思います。

4

1 に答える 1

0

私は最近これをしました。このようなものがあなたのために働くはずです。libraryPlaylistアプリケーションではなく、ライブラリのプレイリスト(この例では名前が付けられています)に問い合わせる必要があります。

NSArray *trackIDs = blah; // the ids you're searching for
NSString *searchFilter = @"databaseID == %@";
NSMutableArray *filters = [NSMutableArray arrayWithCapacity:[trackIDs count]];
for (int i = 0; i < [trackIDs count]; i++) {
    [filters addObject:searchFilter];
}
searchFilter = [filters componentsJoinedByString:@" OR "];
NSArray *trackResult = [[libraryPlaylist tracks] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:searchFilter argumentArray:trackIDs]];

また、trackIDs配列にアイテムが1つしかない場合は問題なく機能するため、その場合に特別なコードを記述する必要はありません。

于 2011-11-25T18:51:25.363 に答える