swift - 当 AVAudioPlayer URL 为 nil 时停止崩溃?

标签 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() 选择音频文件,则 musicFilePathURL 会使用 URL 进行初始化。

如果我确实使用 NSOpenPanel() 选择文件,那么 musicFilePathURL 具有所选文件的位置,然后传递给 AVAudioPlayer。一旦我按下播放按钮,函数“play()”就会执行,然后它会执行 playChosenFile() 和 audioPlayer.play()。

如果我在按下播放按钮之前执行此操作,音乐播放器会播放歌曲。

如果我在选择要播放的任何文件之前按下播放按钮,程序就会崩溃,因为 musicFilePathURL 为 nil。

如果在按下播放按钮之前没有选择文件,我对如何使程序不崩溃感到困惑。例如,如果您打开 VLC,如果您按下播放按钮,它会提示选择一个文件,但如果您决定按下取消,播放器什么也不做。

如果我在启动时没有选择音频文件而按下播放按钮,我怎样才能让我的程序什么都不做?

最佳答案

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

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

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

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

关于swift - 当 AVAudioPlayer URL 为 nil 时停止崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446239/

相关文章:

ios - 为什么我在滚动后在 UITableViewCell 中得到双重内容? ( swift )

ios - 希望将内容固定在视差标题下方的分段 Controller 上方

ios - 如何将 swift Dictionary 转换为 NSDictionary

Swift & SpriteKit - 使用 break 的 switch 语句

iphone - 如何制作和播放程序生成的啁啾声

objective-c - Mac App 上的 "Lock"屏幕

python - 在 Snow Leopard 中安装 VPython?

Swift - 数组到 macOS 中的 TableView

ios - AVAudioPlayer 无法处理 SpriteKit 场景加载

objective-c - OS X 上的 AVAudioPlayer 不播放任何声音