Swift 5.1 NSInternalInconsistencyException 错误

Posted

技术标签:

【中文标题】Swift 5.1 NSInternalInconsistencyException 错误【英文标题】:Swift 5.1 NSInternalInconsistencyException error 【发布时间】:2020-01-10 16:01:15 【问题描述】:

我正在更新旧的媒体播放器项目 (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 发生了什么变化?

【问题讨论】:

【参考方案1】:

根据文档,previousTrackCommand 选择器应将MPRemoteCommandEvent 作为第一个参数并返回MPRemoteCommandHandlerStatus

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

所以你的handlePrevTrack 函数应该声明为:

@objc func handlePrevTrack(_ event: MPRemoteCommandEvent) -> MPRemoteCommandHandlerStatus 
...

【讨论】:

以上是关于Swift 5.1 NSInternalInconsistencyException 错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift 5.1 NSInternalInconsistencyException 错误

Swift 5.1 新语法

(Swift Playground 模板)使用 Swift 5.1 编译的模块不能被 Swift 5.1.3 编译器导入

使用 Swift 5.1 编译的模块不能被 Swift 5.1.2 编译器导入

Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)

Facebook Graph API GET 请求 - 应包含“字段”参数(Swift,Facebook SDK v4.5.1)