从 iOS 上的音乐库中获取所有歌曲
Posted
技术标签:
【中文标题】从 iOS 上的音乐库中获取所有歌曲【英文标题】:Get all songs from music library on iOS 【发布时间】:2015-03-18 06:25:05 【问题描述】:我正在编写可以播放音乐的小应用程序。要获取我使用以下代码的所有歌曲
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
的项目比我图书馆的实际项目多。有谁知道为什么会发生这种情况?
【问题讨论】:
更多项目是什么意思?该数组是否包含重复项?您如何调用此方法以及从何处调用? 更多项目意味着如果我的音乐库有 900 首歌曲,MPMediaQuery.songsQuery().items as [MPMediaItem]
返回超过 1000 个项目。我没有重复的项目。使用此代码的方法在按钮触摸时调用。并且数组不包含重复项。
可能是视频? “媒体项目代表 iPod 库中的单个媒体(例如一首歌曲或一个视频播客)。” developer.apple.com/library/ios/documentation/MediaPlayer/…
嗯...但我正在使用 MPMediaQuery.songsQuery() 所以我认为应该只拍摄歌曲,而不是视频或播客。我还有一个想法 - 云中的歌曲怎么样?在设置中,我将选项设置为不显示仅在云中的项目。可以这样吗?
【参考方案1】:
正如您在 cmets 中所建议的那样,默认情况下包含的 iCloud 媒体项目可能会有所不同。
尝试将此过滤谓词添加到您的查询中以不包括 iCloud 项目:
query.addFilterPredicate(MPMediaPropertyPredicate(value: false, forProperty: MPMediaItemPropertyIsCloudItem))
【讨论】:
以上是关于从 iOS 上的音乐库中获取所有歌曲的主要内容,如果未能解决你的问题,请参考以下文章