如何通过ScriptingBridge检索iTunes Track?

| 我有两种情况。给定歌曲的曲目ID,将等级设置为某个整数。第二个是一样的,除了给我一个磁道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\" ];
}
对于第二种情况,是否有一种方法可以给定Track 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\" ];
}
我相信这比基于歌曲的名称迭代搜索库更有效。     
已邀请:
        我最近才这样做。这样的事情应该为您工作。您需要询问库播放列表(在此示例中为
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
数组仅包含单个项目,则效果很好,因此无需为这种情况编写特殊代码。     

要回复问题请先登录注册