2012-03-09 46 views
2

使用iTunes Scripting Bridge界面,我需要通过其persistentID获取特定的iTunesTrack。我仔细检查了生成的sdp/sdef的头文件,但是看起来好像现有接口中没有方法可以根据任何参数执行任何类型的轨道查询。我接下来的想法是列举所有的赛道,检查每场比赛。如何使用persistenID通过脚本桥从iTunes获取特定的iTunesTrack实例?

暗示是这样会很慢;目标库越大表现越差。我想知道是否有人对这个问题有一个经过验证的解决方案,它不涉及检查从脚本桥返回的每个轨道,一次一个?

get a specific track in itunes via ScriptingBridge,阿尔米哈迪斯表示,他提出了一个解决方案,并张贴它,但显然,他从来没有解决它。

回答

0

诀窍是将整个iTunes库作为一个数组获取,然后使用Cocoa的NSPredicate过滤来查找您想要的内容。

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"]; 
SBElementArray *iTunesSources = [iTunes sources]; 
iTunesSource *library; 
for (iTunesSource *thisSource in iTunesSources) { 
    if ([thisSource kind] == iTunesESrcLibrary) { 
     library = thisSource; 
     break; 
    } 
} 
SBElementArray *libraryPlaylists = [library libraryPlaylists]; 
iTunesLibraryPlaylist *libraryPlaylist = [libraryPlaylists objectAtIndex:0]; 
SBElementArray *musicTracks = [self.libraryPlaylist fileTracks];  
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"persistentID == %@", persistentID]; 
[musicTracks filterUsingPredicate:predicate]; 

一般来说它往往是尽量少做脚本桥接方法使用它们来获取数据了一个很好的经验规则,然后使用一切正常Cocoa方法。

相关问题