Xcode12;新的“子类MPMediaItem必须实现-valueForProperty”错误

问题描述

刚刚从最新版本的Xcode 11 / iOS13更新到Xcode 12.0,并且在AppDelegate中出现错误Thread 1: "Subclass MPMediaItem must implement -valueForProperty: defined in [MPMediaItem class]."

应用启动时,我MPMedia查询库中的歌曲,并将其存储到如下所示的Observable Object中的@Published变量中:

@Published var songs = [MPMediaItem]()


init() {
  self.songs = MPMediaQuery.songs().items
}

稍后,当我要访问属性时,我会像这样:

Text(self.observableObject.songs[0].title)

我尝试将其更改为使用.value(forProperty: "MPMediaItemPropertyTitle"),但是在属性上不使用字符串(然后Xcode会弹出诸如Failed to produce diagnostic for expression; please file a bug report apple.之类的错误)AFAIK,我不是将MPMediaItem子类化为任何地方,我已经尝试了无缘无故地谷歌搜索上述错误

任何人都知道发生了什么事吗?

解决方法

我不确定这是否对您的情况有用,但是最近我遇到了类似的问题。

就我而言,我需要更改引发此崩溃的两件事:

  1. 当没有当前歌曲加载时,我正在初始化一个空的MPMediaItem()作为占位符。尝试访问此空实例上的属性(例如title)时发生崩溃。删除了空的MPMediaItem()并实施了其他占位符方法后,问题就消失了。

  2. 要在模拟器上测试音乐,我使用的是DummyMediaQuery: MPMediaQuery,该数组返回了DummyMediaItem: MPMediaItem的数组。在DummyMediaItem类中,我做了:

final class DummyMediaItem: MPMediaItem {
    private let _artist: String
    override var artist: String { return _artist }

    private let _title: String
    override var title: String { return _title }

    // and so on...

    // fix: crash in iOS 14
    override func value(forProperty property: String) -> Any? {
        return nil
    }
}