Получить все песни из музыкальной библиотеки на iOS

Я пишу небольшое приложение, которое может воспроизводить музыку. Чтобы получить все песни, я использую код ниже

 var songsArray: [MPMediaItem] = [MPMediaItem]()
 var mediaQuery = MPMediaQuery()
 songsArray = MPMediaQuery.songsQuery().items as [MPMediaItem]

 for songItem in songsArray {            
     var song: myMusicItem? = myMusicItem(songTitle: songItem.title, songAlbum: songItem.albumTitle, songArtist: songItem.albumArtist, songGenre: songItem.genre)

     retArray.append(song!)
 }

 println(String(format:"Number of songs:\t%i", retArray.count))

И проблема в том, что retArray содержит больше элементов, чем на самом деле есть в моей библиотеке. Кто-нибудь знает, почему такая ситуация происходит?


person metal_man    schedule 18.03.2015    source источник
comment
Что вы подразумеваете под большим количеством предметов? Этот массив содержит повторяющиеся элементы? Как вы вызываете этот метод и откуда?   -  person Midhun MP    schedule 18.03.2015
comment
Больше элементов означает, что если в моей музыкальной библиотеке 900 песен, MPMediaQuery.songsQuery().items as [MPMediaItem] возвращает более 1000 элементов. У меня нет повторяющихся элементов. Метод с этим кодом вызывается при нажатии кнопки. И массив не содержит повторяющихся элементов.   -  person metal_man    schedule 18.03.2015
comment
Может видео? Элемент мультимедиа представляет собой отдельный элемент мультимедиа (например, одну песню или один видеоподкаст) в библиотеке iPod. developer.apple.com /library/ios/documentation/MediaPlayer/   -  person iOSfleer    schedule 18.03.2015
comment
Ну... но я использую MPMediaQuery.songsQuery(), поэтому я думаю, что нужно брать только песни, а не видео или подкасты. У меня есть еще одна идея - как насчет песен в облаке? В настройках я установил опцию не показывать элементы, которые находятся только в облаке. Может это быть?   -  person metal_man    schedule 18.03.2015


Ответы (1)


Как вы предположили в комментариях, элементы мультимедиа iCloud, которые включены по умолчанию, могут быть разницей.

Попробуйте добавить этот предикат фильтра в свой запрос, чтобы не включать элементы iCloud:

query.addFilterPredicate(MPMediaPropertyPredicate(value: false, forProperty: MPMediaItemPropertyIsCloudItem))
person Ric Santos    schedule 15.04.2018