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

Posted

技术标签:

【中文标题】Xcode12;新的“子类 MPMediaItem 必须实现 -valueForProperty”错误【英文标题】:Xcode12; New “Subclass MPMediaItem must implement -valueForProperty” error 【发布时间】:2020-09-18 06:18:38 【问题描述】:

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

当应用程序启动时,我 MPMediaQuery 歌曲库并将它们存储到 Observable 对象中的 @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() 并实施不同的占位符方法后,问题就消失了。

    为了在模拟器上测试音乐,我使用了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
    

【讨论】:

以上是关于Xcode12;新的“子类 MPMediaItem 必须实现 -valueForProperty”错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode12.5 新特性介绍

Xcode12.5 新特性介绍

创建新的 Xcode 工作区项目

autoconf 配置脚本在较新的 Xcode 版本下中断

如何在 Xcode 12.4 上运行 iOS 模拟器 10.3.1?

Xcode 12 中的 Switch 必须详尽无遗