我在尝试时遇到不一致的问题
func removeFilterPredicate(_ predicate: MPMediaPredicate)
从未
func addFilterPredicate(_ predicate: MPMediaPredicate)
当我测试我的应用程序并添加谓词时,它每次都能正常工作。当我试图删除谓词时,它通常会起作用,但有时不会。
我期望的行为是删除谓词,然后删除一首与要播放的前一个谓词不匹配的随机歌曲
实际上,有时在我删除谓词并跳到下一首歌之后,上一个谓词中的更多歌曲仍在播放
我添加谓词的方式是
func getSongsWithCurrentArtistFor(item: MPMediaItem) -> MPMediaQuery {
let artistPredicate = MPMediaPropertyPredicate(value: item.artist, forProperty: MPMediaItemPropertyArtist, comparisonType: .contains)
let query = MPMediaQuery()
query.addFilterPredicate(artistPredicate)
return query
}
let lockArtist = MediaManager.shared.getSongsWithCurrentArtistFor(item: nowPlaying)
if var items = lockArtist.items {
items.shuffle()
let descriptor = MPMusicPlayerMediaItemQueueDescriptor(itemCollection: MPMediaItemCollection(items: items))
self.mediaPlayer.prepend(descriptor)
}
要删除谓词:
func removeArtistLockFor(item: MPMediaItem) -> MPMediaQuery {
let artistPredicate = MPMediaPropertyPredicate(value: item.artist, forProperty: MPMediaItemPropertyArtist)
let query = MPMediaQuery()
query.removeFilterPredicate(artistPredicate)
return query
}
let unlockArtist = MediaManager.shared.removeArtistLockFor(item: nowPlaying)
if var items = unlockArtist.items?.filter({ (item) -> Bool in
return item.mediaType.rawValue <= MPMediaType.anyAudio.rawValue
}) {
items.shuffle()
let descriptor = MPMusicPlayerMediaItemQueueDescriptor(itemCollection: MPMediaItemCollection(items: self.newSongs.shuffled()))
self.mediaPlayer.prepend(descriptor)
}
我想知道A)我搬家的方式是否有问题
MPMediaPropertyPredicate
我知道我之前发布过关于MPMediaPlayer的问题。。特别是关于
func prepend(_ descriptor: MPMusicPlayerQueueDescriptor)
但这些问题在ios13中得到了解决。这是一个新的问题…事实上,添加谓词总是有效的,这让我认为这更多的是我的错误,而不是苹果的问题。。。?