Userdefaults 保存开关状态
Userdefaults to save switch state
我有一个开关,当转到 "on" 时会播放音乐,当开关设为 "off" 时音乐会恢复播放。我的问题是,当我离开视图控制器时,开关将显示为 "off",而它是开关 "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.
}
}
如果你想在用户默认状态下保存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 :(
}
}
}
希望对您有所帮助
编码愉快...
我想你想知道在哪里插入代码。
更新
更新数据2
然后就可以直接运行了。如果有用,请UP这个答案。
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()
}
}
我的情况跟你差不多,我就是用UserDefaults。这是有关如何操作的分步指南。
创建一个变量,如下例所示。这将设置默认设置并存储复选框的状态以备后用:
var musicSetting = UserDefaults().string(forKey: "Music") ?? "On"
在您的 viewDidLoad
中,添加一个 if 语句来检查复选框是打开还是关闭,如下所示:
if musicSetting == "On" {
theNameOfYourSwitch.isOn = false
} else {
theNameOfYourSwitch.isOn = true
}
在复选框的 IBAction
属性 中,添加如下 if 语句以保存您的设置,具体取决于它是什么:
if theNameOfYourCheckbox.state == NSOnState {
UserDefaults().set("On", forKey: "Music")
} else {
UserDefaults().set("Off", forKey: "Music")
}
这是一张可能有用的屏幕截图:
我找到了正确答案并决定 post 以防有人有同样的问题。
@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")
}
}
我有一个开关,当转到 "on" 时会播放音乐,当开关设为 "off" 时音乐会恢复播放。我的问题是,当我离开视图控制器时,开关将显示为 "off",而它是开关 "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.
}
}
如果你想在用户默认状态下保存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 :(
}
}
}
希望对您有所帮助
编码愉快...
我想你想知道在哪里插入代码。
更新
更新数据2 然后就可以直接运行了。如果有用,请UP这个答案。
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()
}
}
我的情况跟你差不多,我就是用UserDefaults。这是有关如何操作的分步指南。
创建一个变量,如下例所示。这将设置默认设置并存储复选框的状态以备后用:
var musicSetting = UserDefaults().string(forKey: "Music") ?? "On"
在您的
viewDidLoad
中,添加一个 if 语句来检查复选框是打开还是关闭,如下所示:if musicSetting == "On" { theNameOfYourSwitch.isOn = false } else { theNameOfYourSwitch.isOn = true }
在复选框的
IBAction
属性 中,添加如下 if 语句以保存您的设置,具体取决于它是什么:if theNameOfYourCheckbox.state == NSOnState { UserDefaults().set("On", forKey: "Music") } else { UserDefaults().set("Off", forKey: "Music") }
这是一张可能有用的屏幕截图:
我找到了正确答案并决定 post 以防有人有同样的问题。
@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")
}
}