クラウドにあるアイテムを除外
動作を確認した環境
環境 | 情報 |
---|---|
Xcode | 6.3.2 (6D2105) |
iOS | 8.3 |
Swift | 1.2 |
Date | 2015/6/6 |
クラウドにあるアイテムを除外
自分で作成したプレイリストを試しにprintln()で出力してみると、iPhoneに転送してない曲までプレイリストに入ってることがわかる。これは、MPMediaQuery.songsQuery()がクラウド上のアイテムまで一覧に含めてくるのが原因。
実機にない曲を再生しても、裏でiOSが良きに計らってくれるので特に問題は起きないんだけど、転送してない曲が勝手にダウンロードされて再生されるのは気持ち悪いって人もいるかも。
というわけで、クラウド上のアイテムを除外するように修正してみた。
/// プレイリストを更新 func updatePlaylist() { let query = MPMediaQuery.songsQuery() // クラウドにあるアイテムを除外 let num = NSNumber(bool: false) let pre = MPMediaPropertyPredicate(value: num, forProperty: MPMediaItemPropertyIsCloudItem) query.addFilterPredicate(pre) if var all_ar = query.items as? [MPMediaItem] { // 再生回数と曲名でソート all_ar.sort() { s0, s1 in if s0.playCount == s1.playCount { // FIXME: 間違ってはいないが正しくもない return s0.title < s1.title } else { return s0.playCount < s1.playCount } } // 最大で100件取り出し let no = min(100, all_ar.count) playlist = [MPMediaItem](all_ar[0..<no]) } }
MPMediaPropertyPredicateで簡単に処理してある。ちゃんとしたアプリに仕上げるなら、この辺の処理はユーザーが設定できるようにするべきかな。
ちなみに、iPhoneの中のiTunes Storeアプリでサインオフを選べば、勝手にダウンロードされた曲はミュージックアプリの一覧から消えるはず。たぶん。
ソースコード
最終的なソースコードはこちら。
See_Ku / MusicPlayerTips — Bitbucket
https://bitbucket.org/See_Ku/musicplayertips
https://itunes.apple.com/jp/app/46-minute-shuffle/id991599315?mt=8&uo=4&at=10l8JW&ct=hatenablog