2013-01-23 51 views
2

我需要顯示設備上當前所有播放列表的列表。問題是,在打開了iTunes Match的設備上,任意數量的播放列表可能會在手機上保存零個項目。因爲(據我所知),當您使用AVAudioPlayer時,沒有可靠的方法觸發MPMediaItem download,所以我想過濾掉沒有任何本地條目的播放列表。現在,我可以通過單個播放列表循環播放,並刪除沒有assetURL的歌曲,但如果用戶有很多播放列表,則這種播放速度太慢而無法在全球範圍內播放。我試圖過濾整個音樂庫獲得播放列表與MPMediaQuery和iTunes匹配問題

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery]; 
[songsQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]]; 
songsQuery.groupingType = MPMediaGroupingPlaylist; 

然而,當我通過「集合」陣列週期不會出現了任何過濾器的任何歌曲。我會試着根據歌曲是否有assetURL進行過濾,但當然你不能過濾。

有沒有人有一個相當快的方法來解決這個問題? (另外,有沒有人想出了一個體面的方式來觸發MPMediaItem download,因爲蘋果有像對付iTunes的比賽沒有開發者文檔?)

回答

2

MPMediaItemPropertyIsCloudItem過濾器適用於MPMediaItem秒且不MPMediaItemCollection秒。因此,collections陣列不會過濾任何雲項目,因爲它是MPMediaItemCollection的陣列。但items陣列會過濾雲項目,因爲它是MPMediaItem的陣列。

從iOS 6開始,就沒有公共API來觸發通過第三方應用程序下載雲項目。用戶將不得不切換到內置的音樂應用程序來執行此操作。

+0

「從iOS 6開始,沒有公共API通過第三方應用程序觸發雲項目的下載,用戶將不得不切換到內置的音樂應用程序來執行此操作。」這是100%正確嗎? – daidai

+1

我發現如果MPMediaItemIsCloudItem返回true,您可以通過應用播放曲目並聽取整個內容,但它仍未被添加到本地設備 - iOS 8.1 –