音频播放器未初始化Swift

问题描述

我正在尝试“触摸” KikiAudioPlayer中的音频播放器。这是我要这样做的观点。

class AudioBarView: UIView {

    @IBOutlet weak var playPauseButton: UIButton!
    @IBOutlet weak var NowPlayingSongLabel: UILabel!
    
    var kikiAudioPlayer = KikiAudioPlayer()
    
    @IBAction func playPauseButtonpressed(_ sender: UIButton) {
        let playImage = UIImage(systemName: "play.fill")
        if playPauseButton.currentimage == playImage {
            playPauseButton.setimage(UIImage(systemName: "pause.fill"),for: .normal)
            kikiAudioPlayer.play()
        } else {
            playPauseButton.setimage(UIImage(systemName: "play.fill"),for: .normal)
            kikiAudioPlayer.pause()
        }
    }
}

这是“ KikiAudioPlayer”的片段和音频播放器的声明。

class KikiAudioPlayer: NSObject,AVAudioPlayerDelegate {

    var audioPlayer = AVAudioPlayer()

    func play() {
        audioPlayer.play()
        delegate?.audioPlayerPlayingStatusChanged(isPlaying: true)
        updater = CAdisplayLink(target: self,selector: #selector(updateDelegate))
        updater.add(to: RunLoop.current,forMode: RunLoop.Mode.common)
        setWaiting(to: false)
    }
     func pause() {
        audioPlayer.pause()
        delegate?.audioPlayerPlayingStatusChanged(isPlaying: false)
        updater.invalidate()
        setWaiting(to: true)
    }

}

按下按钮时,我的断点就是这样。这意味着我按下该按钮没有任何改变。

po kikiAudioPlayer.audioPlayer <uninitialized>

enter image description here

问题是,如果我创建了KikiAudioPlayer的实例,为什么未初始化AudioBarView中的音频播放器。

我没有向播放器提供任何资产(这并不重要),因为音频播放器可以正常工作,但问题是无法暂停播放。

我尝试清理构建文件夹,但没有帮助。

解决方法

我会与以下代码进行争论:

var audioPlayer = AVAudioPlayer()

AVAudioPlayer没有将init()列为有效的初始化程序。即使您可以在没有警告的情况下使用它。官方文件显示了四个单独的初始化程序,所有初始化程序都至少带有一个参数。

我建议您查看https://www.onooks.com/psa-avaudioplayer-alloc-init-crashes-in-ios-13-1-and-avaudioplayer/此博客以获取更多信息。

已更新:https://developer.apple.com/documentation/avfoundation/avaudioplayer

,

答案比我想的要简单。我在KikiAudioPlayer中删除了音频播放器的声明,并将其添加到App委托中。

var audioPlayer: AVAudioPlayer!