何时在 CarPlay 中使用 beginUpdates() 和 endUpdates()
Posted
技术标签:
【中文标题】何时在 CarPlay 中使用 beginUpdates() 和 endUpdates()【英文标题】:When to use beginUpdates() and endUpdates() in CarPlay 【发布时间】:2020-02-27 18:57:54 【问题描述】:我目前正在开发 CarPlay 音频应用,但不知道何时何地使用 MPPlayableContentManager.shared().beginUpdates()
和 MPPlayableContentManager.shared().endUpdates()
。
Apple 文档说您应该使用 .beginUpdates()
和 .endUpdates()
包装任何更新的 MPContentItem。当我这样做时,CarPlay 上没有任何更新。我觉得我在错误的地方调用函数。
苹果文档:
如果您要更改多个项目或一个项目的多个属性, 您应该在之前调用 MPPlayableContentManager beginUpdates 完成后更新 MPContentItem 对象和 endUpdates 更新它们。这样,项目将在屏幕上全部刷新 一次。
在我看来,当我检索数据时,我需要在 API 请求的响应中使用 .beginUpdates()
和 .endUpdates()
,但我不确定。有人可以举例说明在更新内容时何时同时使用.beginUpdates()
和.endUpdates()
?
【问题讨论】:
【参考方案1】:当您点击 Playable 项目以启动 NowPlaying 屏幕时,它会调用:
func playableContentManager(_ contentManager:
MPPlayableContentManager, initiatePlaybackOfContentItemAt indexPath:
IndexPath, completionHandler: @escaping (Error?) -> Void)
在此函数中,您必须使用 .beginUpdates() 和 .endUpdates()。在这两者之间你必须初始化:
self.infoCenter.nowPlayingInfo = self.setupNowPlayingInfo(for: indexPath)
completionHandler(nil)
此方法主要用于在模拟器中测试 CarPlay 应用。
Check this wwdc2018 from 10:15
【讨论】:
以上是关于何时在 CarPlay 中使用 beginUpdates() 和 endUpdates()的主要内容,如果未能解决你的问题,请参考以下文章