【发布时间】:2020-11-10 20:28:18
【问题描述】:
应用启动后,我正在通过应用委托在我的应用中播放背景音乐。现在,在我的第二个 V.C.我设置了一个拨动开关来关闭/关闭背景音乐。但是,每当我运行以下代码时,我的应用程序都会崩溃并给我这个错误:-
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
谁能告诉我如何在我的 V.C. 中实现以下任务。感谢您的帮助!谢谢:)
**App Delegate**
let vc = SecondViewController()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
vc.playMusic()
return true
}
**Second View Controller**
import UIKit
import AVFoundation
class SecondViewController: UIViewController {
@IBOutlet weak var musicToggleSwitch: UISwitch!
var music: AVAudioPlayer!
let vc_1 = ViewController()
override func viewDidLoad() {
super.viewDidLoad()
self.musicToggleSwitch.setOn(UserDefaults.standard.bool(forKey: "musicToggleState"), animated: true)
}
@IBAction func musicToggleSwitch(_ sender: UISwitch) {
if (musicToggleSwitch.isOn == true) {
if (music.isPlaying == false) {
music.play()
}
}
else {
if (music.isPlaying == true) {
music.stop()
}
}
UserDefaults.standard.set(sender.isOn, forKey: "musicToggleState")
}
func playMusic() {
if let musicURL = Bundle.main.url(forResource: "Music", withExtension: "mp3") {
if let audioPlayer = try? AVAudioPlayer(contentsOf: musicURL) {
music = audioPlayer
music.numberOfLoops = -1
music.play()
}
}
}
}
【问题讨论】:
-
能不能写个NSLog来看看nil值是从哪里得到的?
-
@zeytin 感谢您的回复!我在这一行遇到错误:if (music.isPlaying == true) {
-
var 音乐:AVAudioPlayer?你能像这样可选吗?
-
@zeytin 我试过了,但现在应用程序没有崩溃,但是我切换开关后音乐仍然没有停止
-
你能检查一下musicURL是否有效吗?我假设在
playMusic()中创建音乐播放器失败,当您切换开关时,它会尝试访问music,这是 nil