Objective c 如何通过ScriptingBridge检索iTunes曲目?

Objective c 如何通过ScriptingBridge检索iTunes曲目?,objective-c,cocoa,itunes,scripting-bridge,Objective C,Cocoa,Itunes,Scripting Bridge,我有两种情况。给定歌曲的曲目id,将分级设置为某个整数。第二个是相同的,只是我得到了一个轨迹ID数组。我知道我可以使用ScriptingBridge根据歌曲的名称搜索iTunesTrack对象,但是有什么方法可以根据曲目id来获取它吗?大致如下: iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; NSInteger *rating; NSInteger

我有两种情况。给定歌曲的曲目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" ];
}
对于第二种情况,在给定轨迹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]];
NSArray*trackIDs=blah;//您正在搜索的ID
NSString*searchFilter=@“数据库ID==%@”;
NSMutableArray*过滤器=[NSMutableArray阵列容量:[TrackID计数]];
对于(int i=0;i<[trackIDs计数];i++){
[过滤器添加对象:搜索过滤器];
}
searchFilter=[filters componentsJoinedByString:@“或”];
NSArray*trackResult=[[libraryPlaylist曲目]filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:searchFilter argumentArray:TrackID]];

如果
trackIDs
数组只包含一个项目,那么就可以了,因此不需要为这种情况编写特殊代码。

您找到了如何执行此操作的方法吗?没有。到目前为止,我只是在使用曲目标题进行迭代。