如何解决为什么我的MPMediaItem会被释放并因EXC_BAD_ACCESS
调用tableView.reloadData()
时,这段代码崩溃了吗?
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
let count = self.player.queueForPlayer.count
return count
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let song: MPMediaItem = self.player.queueForPlayer.items[indexPath.row] // EXC_BAD_ACCESS !!!
/// etc.
}
因此,此时不更改queueForPlayer.items数组。 queueForPlayer的类型为MPMediaItemCollection
items数组中包含100个元素,我的表代码在IndexPath第0行第1行崩溃。
我的意思是,这似乎是很基本的东西,所以我能想到的就是MPMediaItem数据类型在做些时髦的事情?
当我使用Address Sanitizer调试并尝试列出.queue时,它会将其放入控制台:
-[MPConcreteMediaItem retain]: message sent to deallocated instance 0x161ccc0d0
因为没有MPConcreteMediaItem
的公共API,所以我想这就是Apple不公开MPMusicPlayerController
队列的原因吗?我认为我们不应该保留MPMediaItem
个对象吗?我不知道。
更新:当我逐步浏览并检查代码的其他方面时,它不会崩溃。所以我怀疑我有某种比赛状况吗?还是Apple有一种实际上不是的“伪同步” API方法?
我应该只是将一个数组存储为persistentID值,那么每次我需要有关MPMediaItem的信息时,我都可以对它们进行媒体查询(个人)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。