2012-03-09 53 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方法。

相關問題