Ошибка Swift 5.1 NSInternalInconsistencyException

Я обновляю старый проект медиаплеера (Swift 3) и получаю странную ошибку:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неподдерживаемая подпись метода действия. Должен возвращать MPRemoteCommandHandlerStatus или принимать обработчик завершения в качестве второго аргумента.

Я получаю эту ошибку в этом коде:

UIApplication.shared.beginReceivingRemoteControlEvents()
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.previousTrackCommand.addTarget(self, action: #selector(handlePrevTrack))

@objc func handlePrevTrack(){
        if playListEpisodes.count == 0 {
            return
        }

        let currentEpisodeIndex = playListEpisodes.firstIndex { (ep) -> Bool in
            return self.episode.title == ep.title && self.episode.author == ep.author
        }

        guard let index = currentEpisodeIndex else { return}
        let nextEpisode:Episode

        if index == 0 {
            nextEpisode = playListEpisodes[playListEpisodes.count - 1]
        }else {
            nextEpisode = playListEpisodes[index - 1]
        }

        self.episode = nextEpisode

 }

что изменилось в Swift 5.1?


person Hattori Hanzō    schedule 10.01.2020    source источник


Ответы (1)


Согласно документации, селектор previousTrackCommand должен принимать MPRemoteCommandEvent в качестве первого аргумента и возвращать MPRemoteCommandHandlerStatus:

func addTarget(handler: (MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus) -> Any

Итак, ваша функция handlePrevTrack должна быть объявлена ​​как:

@objc func handlePrevTrack(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus {
...
}
person Vitalii Gozhenko    schedule 10.01.2020