我曾在我的音樂應用程序正在進行的錯誤,我終於現在追查
有趣的bug在iOS和MPMediaPropertyPredicate MPMediaItem下載狀態(現在我重新快速寫入)。它有幾個方面。 (使用systemMusicPlayer)
- 我想我已經將問題縮小到具有以下屬性的MPMediaItem。
- MPMediaItemPropertyIsCloudItem =真
- assetURL =零
- **這兩個是有意義的,但下面的角落情況下(也可能是很常見的)把我一會兒**
- 第2項可以是真的,但我相信如果你從iTunes複製它,它/可以/可以播放(他們會爲我播放大部分時間),並且沒有辦法告訴。我一遍又一遍地測試了這種情況,似乎是這種情況,但是這些MPMediaItems的存在可能只是有時會導致問題,或者他們很好。但是你找不到這些是哪首歌。
- 如果你正在玩一個隊列,systemMusicPlayer遇到一個 曲庫中的而不是下載或複製形式的iTunes,我相信它會自動跳過 歌曲,類似於systemMusicPlayer.skipToNextItem(),但我認爲 內部它是一個不同的機制。
- 2a。如果您正在使用systemMusicPlayer.skipToPreviousItem()並遇到可能已被跳過的項目,則此行爲會導致基本上不可恢復的問題 - 這意味着,它不會識別您嘗試移回隊列中並引發錯誤並將隊列向前移動。
- 2b。據我所知,當錯誤發生時,MPMediaItem永遠不會成爲nowPlayingItem。 MPMediaItem元數據(總是在本地或非本地可用)被加載,但是試圖播放的歌曲立即再次在隊列中向前發送。
好了,愚蠢和令人氣憤。
現在我的問題:
我不能做有關無法知道,如果一個雲產品可在設備上或不(通過iTunes)任何東西。我/應該/只能過濾掉一個項目是否有assetURL,但是,這是一個保證它是本地和可用的。
let filter:MPMediaPropertyPredicate = MPMediaPropertyPredicate(value: "ipod", forProperty: MPMediaItemPropertyAssetURL, comparisonType: MPMediaPredicateComparison.Contains)
這會返回0個項目。 有誰知道一種方法來過濾此屬性?在這裏做它似乎是最乾淨的,應該離開查詢返回items和itemSections。我的所有表格都是從查詢中填充的,我不認爲這是一種手動重構的方法。
URL的格式如下:ipod-library://item/item.m4a?編號= 5314739480586915369
現在,我懷疑可以添加捕獲表填充表視圖等,但它感覺真的很混亂。
這是IOS 9.2.1,斯威夫特2時,Xcode 7.2.1
我還沒有抹了電話,並重新複製的歌曲。手動從Music應用程序下載它們是物品在不存在時才能獲得assetURL的唯一方法。