gpt4 book ai didi

swift - 为什么 AVAudioPlayer var 等于 nil? - swift

转载 作者:行者123 更新时间:2023-11-28 13:13:15 31 4
gpt4 key购买 nike

这是我的功能:

func playMusic(filename :String!) {
var playIt : AVAudioPlayer!
let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil)
if url == nil {
println("could not find \(filename)")
return
}
var error : NSError?
playIt = AVAudioPlayer(contentsOfURL: url, error: &error)
if playIt==nil {
println("could not create audio player")
return
}
playIt.numberOfLoops = -1
playIt.prepareToPlay()
playIt.play()
}

我调试了我的应用程序,我看到控制台告诉我:无法创建音频播放器

看起来我的 playIt var 是 nil

我该如何解决?

最佳答案

您的代码还有另一个问题:一旦您找出 playItnil 的原因并修复它,您就会发现 playMusic 运行没有错误,但没有声音播放。 那是因为您已将 playIt 声明为 playMusic 中的局部变量。就在它开始播放时,您到达了 playMusic 的结尾,这时它的所有局部变量都超出了范围并且不复存在。 playIt 开始播放几微秒后,它就消失了。

要解决此问题,请在 playMusic 之外声明 playIt 作为实例变量。下面是使用您的 playMusic 方法和我建议的更改的 View Controller 的代码:

import UIKit
import AVFoundation


class ViewController: UIViewController {

// Declare playIt here instead
var playIt : AVAudioPlayer!

override func viewDidLoad() {
super.viewDidLoad()

playMusic("sad trombone.mp3")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func buttonPressed(sender: AnyObject) {

}

func playMusic(filename :String!) {
// var playIt : AVAudioPlayer! *** this is where you originally declared playIt
let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil)
if url == nil {
println("could not find \(filename)")
return
}
var error : NSError?
playIt = AVAudioPlayer(contentsOfURL: url, error: &error)
if playIt==nil {
println("could not create audio player")
return
}
playIt.numberOfLoops = -1
playIt.prepareToPlay()
playIt.play()
}

}

尝试两种方式——将 playIt 声明为实例变量,将 playIt 声明为 playMusic 中的局部变量。你会想选择前者。

我也支持 nhgrif 的建议:playMusic 应该采用 StringString? 参数;不是 String!

关于swift - 为什么 AVAudioPlayer var 等于 nil? - swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30423944/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com