Ios AVAudioPlayerDelegate不';不要调用该方法
下面是类中的方法:Ios AVAudioPlayerDelegate不';不要调用该方法,ios,swift,delegates,audio-player,Ios,Swift,Delegates,Audio Player,下面是类中的方法: import UIKIt import Foundation class notMoving { var drumPlayerObject = drumPlayer() var fileManagerObject = fileManager1() let drumStrength = 1 var bassStrength = 1 var synthStrength = 1 var indexToPlay: Int = 0
import UIKIt
import Foundation
class notMoving {
var drumPlayerObject = drumPlayer()
var fileManagerObject = fileManager1()
let drumStrength = 1
var bassStrength = 1
var synthStrength = 1
var indexToPlay: Int = 0
// here we start the drum player.
func startToPlay() {
fileManagerObject.clearPlayedListDrum(drumStrength, KeyNoteOfInstDrum: "C")
if let indexToPlay = fileManager1().randomizeTheNextInstrument(fileManager1().drums, Strength: drumStrength, KeyNote: "C") {
fileManager1().drums[indexToPlay].4 = true
self.indexToPlay = indexToPlay
}
let instrument = fileManager1().drums[self.indexToPlay].0
let name = fileManager1().drums[self.indexToPlay].1
let length = fileManager1().drums[self.indexToPlay].2
let power = fileManager1().drums[self.indexToPlay].3
let ifplayed = fileManager1().drums[self.indexToPlay].4
let tempo = Double(fileManager1().drums[self.indexToPlay].5)
let bridge: Bool = false
let extention = fileManagerObject.extentionOfFile
let loops = fileManager1().drumNumberOfLoops()
drumPlayerObject.play(instrument, name: name, extentionOfFile: extention,
length: length, power: power, ifplayed: ifplayed, tempo: tempo, loops:
loops, bridge: bridge)
fileManager1().clearPlayedListDrum(drumStrength, KeyNoteOfInstDrum: "C")
}
}
这是drumPlayer类的AVAudioPlayerDelegate扩展
extension drumPlayer : AVAudioPlayerDelegate {
func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) {
println("finished playing \(flag)")
var notMovingObject = notMoving()
notMovingObject.startToPlay()
}
func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer!, error: NSError!) {
println("\(error.localizedDescription)")
}
}
但是audioplayerdfinishplaying
在文件完成后不会调用startToPlay
方法。它只打印“finished playing true”
我做错了什么 你的
notMovingObject
不会被保留在任何地方,因此在程序退出后,audioplayerddinishplaying()
对象被释放。我通过在我的播放器的“func play”中创建一个实例找到了解决方案。因此,实例仅在播放器启动后创建 旁注:类名应该以大写字母开头谢谢你!我会纠正它)但是你对这个问题有什么想法吗?)好的。您可以建议什么样的解决方案?最小侵入性的解决方案可能是将实例变量notMovingObject
添加到drumPlayer
类中。但是,我无法判断它是否是一个好的解决方案,因为我没有更大的图景。我尝试添加它,但它给了我Thread1:EXC_BAD_ACCESS(code=2,address=0x7fff5ddb7fe8)错误,并在输出(lldb)中显示此错误。