使用用户默认值保存数据

时间:2016-10-02 03:42:26

标签: ios swift nsuserdefaults userdefaults

我正在我的应用程序中创建一个功能,允许您静音音乐,我在那里放置一个开关,以便您可以在打开和关闭之间进行更改。但是,该应用程序中的开关工作正常,当我关闭视觉控制器并将其拉回时它仍会显示它是如何离开的,但是当你关闭应用程序并将其打开时,交换机看起来好像关闭但它仍然播放音乐。这是我的代码,我会附上一张图片。

import Foundation
import UIKit
import SpriteKit
import AVFoundation




var bombSoundEffect: AVAudioPlayer!
var Ghost = SKSpriteNode()

class SecondViewController: UIViewController {

var sw = false




@IBOutlet var mySwitch: UISwitch!

@IBAction func switchpressed(_ sender: AnyObject) {

let defaults = UserDefaults.standard

    if mySwitch.isOn{
                defaults.set(true, forKey: "SwitchState")

        if bombSoundEffect != nil {
            bombSoundEffect.stop()
            bombSoundEffect = nil

        }

    }
    else{
        defaults.set(false, forKey: "SwitchState")

        let path = Bundle.main.path(forResource: "newmusic.wav", ofType:nil)!
        let url = URL(fileURLWithPath: path)


        do {
            let sound = try AVAudioPlayer(contentsOf: url)
            bombSoundEffect = sound
            sound.numberOfLoops = -1
            sound.play()
        } catch {
            // couldn't load file :(
        }

    }


}


override func viewDidLoad() {
    super.viewDidLoad()

    super.viewDidLoad()

    let defaults = UserDefaults.standard

    if (defaults.object(forKey: "SwitchState") != nil) {
        mySwitch.isOn = defaults.bool(forKey: "SwitchState")


    }
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
}


}

这是图片 enter image description here 如果你不明白我上面说的话,请提问。

2 个答案:

答案 0 :(得分:1)

据我所知,您的代码未正确检查用户默认值。在 viewDidLoad 中,您必须检查用户默认值的bool值是否设置为true。

var time = 1475173800000;
    
var date = new Date(time).toJSON().slice(0, 10).split("-").reverse().join("/");

console.log(date);

请检查此代码。希望它会对你有所帮助。

答案 1 :(得分:0)

viewDidLoad中,您需要检查何时需要暂停音乐:

// Keep this part the same
let defaults = UserDefaults.standard

if (defaults.object(forKey: "SwitchState") != nil) {
    mySwitch.isOn = defaults.bool(forKey: "SwitchState")
}

// Check to see if the switch is off, if so, stop the music
if !mySwitch.isOn {
    bombSoundEffect.stop()
    bombSoundEffect = nil
}

您还可以将重复的电话转至super.viewDidLoad

注意 :您的视图控制器中看起来确实有更多代码,因为目前没有任何内容可以播放音乐,所以这个解决方案鉴于您没有提供足够的信息,可能无效。