【问题标题】:How do I retrieve an iTunes Track via ScriptingBridge?如何通过 ScriptingBridge 检索 iTunes 曲目?
【发布时间】:2011-06-14 16:54:50
【问题描述】:

我有两种情况。给定歌曲的曲目 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" ];
}

我相信这会比根据歌曲名称反复搜索库更有效。

【问题讨论】:

  • 你知道怎么做吗?
  • 不。到目前为止,我只是在使用曲目标题进行迭代。

标签: objective-c cocoa itunes scripting-bridge


【解决方案1】:

我最近才这样做。像这样的东西应该适合你。您需要询问库播放列表(在此示例中名为 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 数组只包含一个项目,那么就可以正常工作,因此无需为这种情况编写特殊代码。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2011-02-14
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多