Swift 4-按下按钮播放声音并获取线程1:致命错误:在展开可选值时意外发现零
我最近开始学习Swift,想做一个简单的DJ采样器来测试我所学到的当按下UIButton时播放声音的方法 所有12个按钮都在一个@iAction下,并使用标签1-12进行区分 加载模拟器并按下其中一个按钮后,碰撞停止 线程1:致命错误:在展开可选值时意外发现nil 下面是函数中的代码和触发的错误行。任何帮助和建议都将不胜感激。感谢您查看这一条上的代码Swift 4-按下按钮播放声音并获取线程1:致命错误:在展开可选值时意外发现零,swift,swift4,xcode10,Swift,Swift4,Xcode10,我最近开始学习Swift,想做一个简单的DJ采样器来测试我所学到的当按下UIButton时播放声音的方法 所有12个按钮都在一个@iAction下,并使用标签1-12进行区分 加载模拟器并按下其中一个按钮后,碰撞停止 线程1:致命错误:在展开可选值时意外发现nil 下面是函数中的代码和触发的错误行。任何帮助和建议都将不胜感激。感谢您查看这一条上的代码 import UIKit import AVFoundation class ViewController: UIViewController
import UIKit
import AVFoundation
class ViewController: UIViewController, AVAudioPlayerDelegate {
var audioPlayer : AVAudioPlayer!
var selectedSoundFileName : String = ""
let soundArray = ["FRESH", "AIR HORN", "BASS", "CANNON", "BREAK", "CHECK IT", "YEAH BOY", "LIKE THIS", "HIT IT", "AHH", "SAH YEAH", "AWW"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func buttonPressed(_ sender: UIButton) {
selectedSoundFileName = soundArray[sender.tag - 1]
print(selectedSoundFileName)
playSound()
}
// all 12 buttons are under one @IBAction and differentiated by using tags 1-12
func playSound(){
let soundURL = Bundle.main.url(forResource: selectedSoundFileName, withExtension: "wav")
do {
audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
} // audioPlayer line above triggers - Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value //
catch {
print(error)
}
audioPlayer.play()
}
}
看起来这条线有问题:
audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
我喜欢打电话给代码>“强制展开”操作符“如果无则崩溃”操作符。如果它引用的变量包含nil,则会导致硬崩溃,并显示错误消息“在展开可选值时意外发现nil”
假设您正在使用force unwrap操作符,并且得到了确切的错误消息,那么您的变量soundURL
应该是零。您应该在打印soundURL
内容的崩溃行上方添加一条打印语句。或者在该行设置断点并检查该变量中的值。确认变量为零。然后找出原因。可能的原因是,您试图引用的文件不存在于您指定的位置,并且不具有您指定的文件名
您可能需要打印主捆绑包的资源路径(print(bundle.main.resourcePath)!
)。然后从模拟器运行应用程序,复制路径,转到查找程序,按shift“G”命令粘贴该路径,并检查应用程序包的资源路径。是否有名为.wav
的文件(其中
是您的文件名?我打赌没有。(注意,名称需要完全匹配,包括相同的大小写。)不要发布代码的图片。编辑您的问题,将代码粘贴到其中,选择该代码,然后点击“{}”按钮设置该代码的格式。然后指出哪一行失败,并告诉我们确切的错误消息。@Duncac感谢您在下面提供的宝贵反馈和注释!进行了上面的更改并正在进行代码更新。再次感谢