Userdefaults保存开关状态

时间:2016-09-30 00:50:47

标签: ios nsuserdefaults swift3

我有一个转到" on"将音乐和音乐开关设置为"关闭"音乐将继续播放。我的问题是,当我离开视图控制器时,开关将显示为"关闭"何时切换" on"。我的开关代码如下,我不知道该写什么才能让应用程序记住开关状态,请帮忙。

//
//  SecondViewController.swift
//  Urban Sphere
//
//  Created by Oren Edrich on 9/11/16.
//  Copyright © 2016 Oren Edrich. All rights reserved.
//

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) {

    if mySwitch.isOn{

        if bombSoundEffect != nil {
            bombSoundEffect.stop()
            bombSoundEffect = nil   
        }
    }
    else{
        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()

}

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

}

4 个答案:

答案 0 :(得分:1)

我想知道在哪里插入代码。

UPDATA

updata2 然后你可以直接运行。如果它有用,请提出这个答案。

import Foundation
import UIKit
import SpriteKit
import AVFoundation


class SecondViewController: UIViewController {

        static let bombSoundEffect = {()->(AVAudioPlayer) in

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

        var sw = false

        var Ghost = SKSpriteNode()


        @IBOutlet var mySwitch: UISwitch!

        @IBAction func switchpressed() {

            if mySwitch.isOn{

                SecondViewController.bombSoundEffect.play()
            }else{

                SecondViewController.bombSoundEffect.stop()
            }

            //*************    save status    *************
            UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");


        }

        override func viewDidLoad() {

            super.viewDidLoad()



            mySwitch.addTarget(self, action: #selector(switchpressed), for: .valueChanged)

            //*************    load status    *************
            mySwitch.isOn = UserDefaults.standard.bool(forKey: "SwitchStatus");
            switchpressed()

        }



    }

答案 1 :(得分:1)

我和你的情况类似,我只是使用UserDefaults。以下是有关如何执行此操作的分步指南。

  1. 创建一个类似以下示例的变量。这将设置默认设置并存储复选框的状态以供以后使用:

    var musicSetting = UserDefaults().string(forKey: "Music") ?? "On"
    
  2. viewDidLoad中,添加一个if语句,用于检查复选框是打开还是关闭,如下所示:

    if musicSetting == "On" {
        theNameOfYourSwitch.isOn = false
    } else {
        theNameOfYourSwitch.isOn = true
    }
    
  3. 在复选框的IBAction属性中,添加if语句,如下所示,将保存您的设置,具体取决于它:

    if theNameOfYourCheckbox.state == NSOnState {
        UserDefaults().set("On", forKey: "Music")
    } else {
        UserDefaults().set("Off", forKey: "Music")
    }
    
  4. 这是一个可能有用的屏幕截图: image here...

答案 2 :(得分:1)

我找到了正确的答案并决定发布它,任何人都有同样的问题。

@IBAction func saveSwitchState(sender: AnyObject) {
    var defaults = NSUserDefaults.standardUserDefaults()

if bluetoothSwitch.on {
    defaults.setBool(true, forKey: "SwitchState")
} else {
    defaults.setBool(false, forKey: "SwitchState")
}
}

和...

override func viewDidLoad() {
super.viewDidLoad()

var defaults = NSUserDefaults.standardUserDefaults()

if (defaults.objectForKey("SwitchState") != nil) {
    bluetoothSwitch.on = defaults.boolForKey("SwitchState")
}
}

答案 3 :(得分:0)

如果要在用户默认状态下保存Switch的状态,则可以使用 本地方法

UserDefaults.standard.set(_ value: Bool, forKey defaultName: String)

喜欢这个

    UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");
    UserDefaults.standard.synchronize();

获取开关状态时,只需使用

    let status = UserDefaults.standard.bool(forKey: "SwitchStatus");

更新:

@IBAction func switchpressed(_ sender: AnyObject) {

UserDefaults.standard.set(mySwitch.isOn, forKey: "SwitchStatus");

if mySwitch.isOn{

    if bombSoundEffect != nil {
        bombSoundEffect.stop()
        bombSoundEffect = nil
    }
}
else{
    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 :(
    }
}
}

希望有所帮助

快乐的编码......

相关问题