我有一个正在播放音乐的UIViewController
和一个列出歌曲的UITableViewController
。我让我离开PlayViewController
,AVAudioPlayer
仍然会播放一首歌。我希望我在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()
答案 0 :(得分:1)
由于AvAudioPlayer(secondPlayView)是一个弱属性。当PlayViewController从内存中删除时它会消失。确保你的AVAudioPlayer实例正确初始化或者当你回到PlayViewController时引用相同的实例。
答案 1 :(得分:1)
这段代码毫无意义:
var secondPlayView = PlayFromSearchVC()
if secondPlayView.audioPlayer.playing == true {
第一行创建PlayFromSearchVC的新实例。由于之前不存在,第二行没有意义。这就像问一个刚出生的婴儿最喜欢的玩具。
您不会显示PlayViewController
课程的结构。如何定义audioPlayer
?
不要使用可以关闭的视图控制器来管理声音播放。创建一个管理声音播放的单例对象。向声音管理器添加方法以停止当前正在播放的任何声音,以及开始播放新声音的方法。从需要播放声音的所有地方呼叫声音管理器。
答案 2 :(得分:0)
当您尝试将currentTime设置为AVAudioPlayer项目但在设置播放内容之前 - >你肯定会得到这样的错误