当我停止AVAudioPlayer时,我收到错误EXC_BAD_ACCESS

时间:2015-08-10 12:21:01

标签: ios xcode swift avaudioplayer

我有一个正在播放音乐的UIViewController和一个列出歌曲的UITableViewController。我让我离开PlayViewControllerAVAudioPlayer仍然会播放一首歌。我希望我在UITableViewController上返回,我选择一首不同的歌曲AVAudioPlayer将被停止。我尝试了很多不同的方法,但我得到了相同的错误EXC_BAD_ACCESS。我也使AVAudioPlayer像弱var一样,我也让PlayViewController是一个公共类,但我得到了同样的错误。我该如何解决这个问题?

        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "playMusic" {
            var playMVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayMusicVC
            var currentIndPass = tableView.indexPathForSelectedRow()!.row
//            println("array item \(arrayItem)")
            playMVC.currentIndex = currentIndPass
            playMVC.arrayOfSongs = arrayItem
            searchController.active = false
//            println("array item \(arrayItem)")
            //test
            var secondPlayView = PlayFromSearchVC()
            if secondPlayView.audioPlayer.playing == true {
                secondPlayView.audioPlayer.stop()
                println("It is works")
            } else {
                println("It is not works")
            }
            //test
        } else if segue.identifier == "summer" {
//            println("array super filter and count \(arrayFilterOfNames) co \(arrayFilterOfNames.count)")
            var playVC = (segue.destinationViewController as! UINavigationController).topViewController as! PlayFromSearchVC
            var currentInt = tableView.indexPathForSelectedRow()!.row
            playVC.currentSongString = arrayFilterOfNames[currentInt]
//            playVC.currentIndex = currentInt
//            playVC.arrayOfSongs = arrayFilterOfNames // arrayFilterNames
            searchController.active = false
            //
            var secondPlayView = PlayFromSearchVC()
            if secondPlayView.audioPlayer.playing == true {
                secondPlayView.audioPlayer.stop()
                println("It is works")
            } else {
                println("It is not works")
            }
            //
        }
    }

AVAudioPlayer是

    var audioPlayer = AVAudioPlayer()

enter image description here

不同的变体也是错误的 enter image description here

3 个答案:

答案 0 :(得分:1)

由于AvAudioPlayer(secondPlayView)是一个弱属性。当PlayViewController从内存中删除时它会消失。确保你的AVAudioPlayer实例正确初始化或者当你回到PlayViewController时引用相同的实例。

答案 1 :(得分:1)

这段代码毫无意义:

var secondPlayView = PlayFromSearchVC()
if secondPlayView.audioPlayer.playing == true {

第一行创建PlayFromSearchVC的新实例。由于之前不存在,第二行没有意义。这就像问一个刚出生的婴儿最喜欢的玩具。

您不会显示PlayViewController课程的结构。如何定义audioPlayer

不要使用可以关闭的视图控制器来管理声音播放。创建一个管理声音播放的单例对象。向声音管理器添加方法以停止当前正在播放的任何声音,以及开始播放新声音的方法。从需要播放声音的所有地方呼叫声音管理器。

答案 2 :(得分:0)

当您尝试将currentTime设置为AVAudioPlayer项目但在设置播放内容之前 - >你肯定会得到这样的错误