2011-06-14 27 views
0

我有兩種情況。鑑於歌曲的曲目ID,請將評分設置爲某個整數。第二個是相同的,除了我被給了一個track ID的數組。我知道我可以使用ScriptingBridge根據歌曲名稱搜索iTunesTrack對象,但有什麼方法可以根據曲目ID找到它?沿着線的東西:如何通過ScriptingBridge檢索iTunes曲目?

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

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

對於第二種情況,有一種方法來檢索給定的軌道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" ]; 
} 

我相信這比基於歌曲名稱迭代搜索庫更有效。

+0

你發現如何做到這一點? – david 2011-06-17 08:01:36

+0

沒有。截至目前,我只是通過使用曲目標題進行迭代。 – 2011-06-23 00:10:42

回答

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陣列只包含一個項目,所以沒有必要寫特殊的代碼對於這種情況下的作品就好了。