2011-06-14 24 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阵列只包含一个项目,所以没有必要写特殊的代码对于这种情况下的作品就好了。