何时在 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()的主要内容,如果未能解决你的问题,请参考以下文章

使用 CarPlay 框架的 CarPlay 应用在 iOS 13 或更早版本上崩溃

Carplay 连接/断开连接事件?

在 iOS Carplay 中延迟加载数据

carplay在播放音乐时,为啥音乐声音突然变小。

Carplay 仪表板中不显示播放/暂停按钮

使用 CPNowPlaying ImageButton 时,CarPlay 正在播放屏幕在深色外观上显示错误图像