当AVAudioPlayer URL为零时停止崩溃?

时间:2016-05-25 19:41:33

标签: swift macos avaudioplayer

我仍然是编码的初学者,但我正在研究一个非常基本的音乐播放器,以了解Swift的工作原理。

////Functions

//Play chosen file function
func playChosenFile() {

    //Set up the music file URL.
    let musicFilePathURL = MenuBarModel.mainMenu.URL

    if musicFilePathURL != nil {

        //Initialize audioPlayer with safety.
        do {

            try audioPlayer = AVAudioPlayer(contentsOfURL: musicFilePathURL!)

        }

        catch {

        }

    }

    else if musicFilePathURL == nil {
        //Some code that will make the player do nothing.

    }


}

//Play function
func play() {

    playChosenFile()
    audioPlayer.play()
}

因此,如果我使用NSOpenPanel()选择音频文件,则会使用URL初始化musicFilePathURL。

如果我使用NSOpenPanel()选择文件,则musicFilePathURL具有所选文件的位置,然后传递给AVAudioPlayer。按下“播放”按钮后,执行“play()”功能,然后执行playChosenFile()和audioPlayer.play()。

如果我按下播放按钮之前,音乐播放器会播放歌曲。

如果在选择要播放的文件之前按下播放按钮,则程序崩溃,因为musicFilePathURL为零。

如果在按下播放按钮之前没有选择文件,我对如何使程序不崩溃感到困惑。例如,如果您打开VLC,如果按“播放”按钮,则会提示选择文件,但如果您决定按取消,则播放器不会执行任何操作。

如果在启动时没有选择音频文件的情况下按播放按钮,如何让我的程序无效?

1 个答案:

答案 0 :(得分:0)

你对音频播放器的try / catch语句有正确的想法,但你可以在play()函数中使用另一个。

这样当audioPlayer尝试播放一个空对象时,会捕获一个异常,你可以自己处理它,而不是让应用程序崩溃。

也许是这样的?我会尝试一下,但不幸的是我把我的Mac留在了家里。

func play(){
    do { 
        playChosenFile()
        audioPlayer.play()
    } catch {
        print "Error Occurred (Did the user specify a file?)
    }
}