iOS查询通过相册MPMediaEntityPersistentID有时会带回没有歌曲

时间:2016-01-01 22:05:34

标签: ios swift mpmediaquery

我正在编写一个使用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;
}

任何帮助解决这个问题都将不胜感激!

1 个答案:

答案 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;
}