问题描述
刚刚从最新版本的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子类化为任何地方,我已经尝试了无缘无故地谷歌搜索上述错误。
任何人都知道发生了什么事吗?
解决方法
我不确定这是否对您的情况有用,但是最近我遇到了类似的问题。
就我而言,我需要更改引发此崩溃的两件事:
-
当没有当前歌曲加载时,我正在初始化一个空的
MPMediaItem()
作为占位符。尝试访问此空实例上的属性(例如title
)时发生崩溃。删除了空的MPMediaItem()
并实施了其他占位符方法后,问题就消失了。 -
要在模拟器上测试音乐,我使用的是
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
}
}