我正在尝试使用applicationQueuePlayer
andperform
方法编辑我的音乐播放器的队列(详情请点击此处)。但是,每当我应用任何数组函数(map
等filter
)时,都需要几秒钟才能完成,这会导致(我认为)数据竞争和崩溃,例如,当用户立即删除两个音轨时。
var musicPlayerController = MPMusicPlayerController.applicationQueuePlayer
self.musicPlayerController.perform { (currentQueue) in
let items = currentQueue.items
let itemsToRemove = items.filter { $0.artist == "Some artist" } // this takes multiple seconds
if let item = itemsToRemove.first {
currentQueue.remove(item)
}
} completionHandler: { (newQueue, error) in
if let e = error {
print(e)
} else {
tracks = items.map { Track(item: $0) } // this takes multiple seconds
}
}
当我通过一个MPMediaItem
数组时,问题就出现了。我认为这不是 MPMediaItem 类的问题,因为我可以map
在应用程序的其他地方完成 [MPMediaItem] 的一个,例如从播放列表中获取项目时(与队列项目类似大小的数组) .
该问题仅在MPMediaItems
从MPMusicPlayerControllerMutableQueue
and中获取时才会发生MPMusicPlayerControllerQueue
这只是 MusicKit API 的错误吗?