如何使用Swift在Xcode中使用切换开关关闭背景音乐



应用程序启动后,我将从应用程序代理在应用程序中播放背景音乐。现在,在我的第二个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()
}
}

}

}

这应该可以解决您的问题。

如果它仍然没有播放,请在音乐变量的创建块中添加一些断点,看看出了什么问题。

class SecondViewController: UIViewController {

@IBOutlet weak var musicToggleSwitch: UISwitch!

var music: AVAudioPlayer? = {
guard let musicURL = Bundle.main.url(forResource: "Music", withExtension: "mp3") else {
return nil
}

let audioPlayer = try? AVAudioPlayer(contentsOf: musicURL)
audioPlayer?.numberOfLoops = -1
return audioPlayer
}()

override func viewDidLoad() {
super.viewDidLoad()

self.musicToggleSwitch.setOn(UserDefaults.standard.bool(forKey: "musicToggleState"), animated: true)
}

@IBAction func musicToggleSwitch(_ sender: UISwitch) {
guard let music = music, sender.isOn != music.isPlaying else {
return
}

if sender.isOn {
music.play()
} else {
music.stop()
}

UserDefaults.standard.set(sender.isOn, forKey: "musicToggleState")
}

func playMusic() {
music?.play()
}
}

问题是这一行:

let vc = SecondViewController()

这与您在界面中看到的SecondViewController不同。因此,在错误的视图控制器上调用了playMusic,在视图控制器上,您可以看到music仍然是nil,然后崩溃。

最新更新