Xcode12; Новая ошибка “Подкласс MPMediaItem должен реализовать -valueForProperty”

#ios #swiftui #ios14 #mpmediaitem #xcode12

#iOS #swiftui #ios14 #mpmediaitem #xcode12

Вопрос:

Только что обновлен до Xcode 12.0 с последней версии Xcode 11 / iOS13, и я получаю сообщение об ошибке в AppDelegate: Thread 1: "Subclass MPMediaItem must implement -valueForProperty: defined in [MPMediaItem class]."

При запуске приложения я MPMediaQuery использую библиотеку для песен и сохраняю их в переменной @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. Кто-нибудь нашел решение этой проблемы?.

Ответ №1:

Я не уверен, полезно ли это для вашей ситуации, но недавно я столкнулся с аналогичной проблемой.

В моем случае мне нужно было изменить 2 вещи, которые вызвали этот сбой:

  1. Я инициализировал пустое MPMediaItem() место в качестве заполнителя, когда текущая песня не была загружена. Сбой произошел при попытке получить доступ к свойству (например title ,) в этом пустом экземпляре. После удаления пустого MPMediaItem() и внедрения другого подхода к заполнителю проблема исчезла.

  2. Чтобы протестировать музыку на симуляторе, я использовал a 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
    }
}