我正在编写一个使用Apple内置MediaPlayer库播放音乐的应用。我存储了一系列专辑和一组ID,然后当选择一个时,我使用id搜索一个专辑。出于某种原因,尽管有一个与之相关的id,但是有些专辑找不到任何歌曲。每次相同的专辑都不起作用,似乎没有任何模式。
我使用以下代码将名称和ID存储到两个数组中
let query = MPMediaQuery.albumsQuery()
let mediaCollection = MPMediaItemCollection(items: query.items!)
for album in mediaCollection.items {
albumTitleArray.append(album.albumTitle!)
albumIdArray.append(album.albumPersistentID)
}
当选择一个时,我将id传递给queryMedia方法
func queryMedia(identifier:MPMediaEntityPersistentID) -> MPMediaItemCollection {
let predicateId = MPMediaPropertyPredicate(value: String(identifier), forProperty: MPMediaItemPropertyAlbumPersistentID, comparisonType:MPMediaPredicateComparison.EqualTo)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicateId)
let collection = MPMediaItemCollection(items: query.items!)
return collection;
}
任何帮助解决这个问题都将不胜感激!
答案 0 :(得分:2)
由于从MPMediaEntityPersistentID到String的转换导致查询中出现一些字符,或查询中存在比较错误。
我已将代码更改为转换为NSNumber,现在查询正确查找所有相册。
在上面的代码示例中更改此部分
String(identifier)
到
NSNumber(unsignedLongLong: identifier)
所以它看起来像这样
func queryMedia(identifier:MPMediaEntityPersistentID) -> MPMediaItemCollection {
let predicateId = MPMediaPropertyPredicate(value: NSNumber(unsignedLongLong: identifier), forProperty: MPMediaItemPropertyAlbumPersistentID, comparisonType:MPMediaPredicateComparison.EqualTo)
let query = MPMediaQuery.init()
query.addFilterPredicate(predicateId)
let collection = MPMediaItemCollection(items: query.items!)
return collection;
}