私はViewControllerにロードする別のクラスのAVAudioPlayerを持っています。ここでは、コードです:AVAudioPlayerでサウンドが再生されませんか?
import Foundation
import AVFoundation
class SoundController {
var audioPlayer: AVAudioPlayer!
init() {
}
func playAudio() {
let path = NSBundle.mainBundle().pathForResource("ring-ring", ofType: "aiff", inDirectory: "Media")!
let url = NSURL(fileURLWithPath: path)
do {
print("Let's play the sound")
let sound = try AVAudioPlayer(contentsOfURL: url)
self.audioPlayer = sound
sound.play()
} catch {
print("Error playing sound file")
}
}
}
そしてここ
override func viewDidLoad() {
super.viewDidLoad()
let sound = SoundController()
sound.playAudio()
}
すべてがコンパイルのViewControllerであり、私は「のサウンドを再生してみましょう」コンソール出力を得るが、そのデバイスに関係なく、私は、音のdoesnのテスト演奏しない。何が間違っている?
どのオブジェクトがあなたの 'sound'インスタンスを生かしていますか?ここであなたのコードにそのようなものはありません。したがって、 'sound'は' -viewDidLoad'がスコープを使い果たした直後に解放されます。 – holex
ここでの修正は何ですか? – Tronic
多分、ARCの仕組みを理解していて、今の問題を一瞬で解決するのに役立つかもしれません。その場合、スコープの外側に強力なポインタを置いて、 'SoundController'クラスのインスタンスはインスタンス化された直後に解放されないためです。 – holex