Swift 按下按钮时,如何在NSDefault中保存布尔值?

Swift 按下按钮时,如何在NSDefault中保存布尔值?,swift,sprite-kit,Swift,Sprite Kit,我编写了一个昼夜按钮主题。如果用户按下日期按钮,GlobalData.DayBool=true,和GlobalData.NightBool=false。当他们按下夜间按钮时,GlobalData.DayBool=false和GlobalData.NightBool=true。背景变为夜间或白色,取决于哪个是真的,哪个是假的 假设用户单击了夜间按钮GlobalData.NightBool=true和GlobalData.DayBool=false,背景变为黑色 我希望根据他们按下的按钮保存布尔值,

我编写了一个昼夜按钮主题。如果用户按下日期按钮,
GlobalData.DayBool=true
,和
GlobalData.NightBool=false
。当他们按下夜间按钮时,
GlobalData.DayBool=false
GlobalData.NightBool=true
。背景变为夜间或白色,取决于哪个是真的,哪个是假的

假设用户单击了夜间按钮
GlobalData.NightBool=true
GlobalData.DayBool=false
,背景变为黑色

我希望根据他们按下的按钮保存布尔值,这样当他们关闭应用程序时,他们的背景将与他们选择的相同

//Day Button Pressed
for touch: AnyObject in touches {

    let location = touch.locationInNode(self)

    if dayButton.containsPoint(location) {

        for touch: AnyObject in touches {
            _ = touch.locationInNode(self)

            backgroundColor = GlobalData.dayColor
            GlobalData.nightBool = false
            GlobalData.dayBool = true
        }
    }
}

//Night Button Pressed
for touch: AnyObject in touches 
    let location = touch.locationInNode(self)

    if nightButton.containsPoint(location) {

        for touch: AnyObject in touches {
            _ = touch.locationInNode(self)

            backgroundColor = GlobalData.nightColor
            GlobalData.nightBool = true
            GlobalData.dayBool = false 
        }
    }
}
下面是我的代码,用于根据其中一个是真是假切换背景:

//Day Background
if GlobalData.dayBool == true && GlobalData.nightBool == false {
    backgroundColor = GlobalData.dayColor
}

//Night Background
if GlobalData.nightBool == true && GlobalData.dayBool == false {
    backgroundColor = GlobalData.nightColor
}

如果您有任何问题,请在下面留下。我真的需要这方面的帮助。

为您的按钮创建一个
iAction
,然后执行下面的NSUserDefault部分

我总是喜欢将NSUserDeafult注册为默认设置,很多人只是继续第二步而没有注册

在AppDelgate.swift中注册NSUserDefault

NSUserDefaults.standardUserDefaults().registerDefaults(["valueName": AnyObject])
将值设置为您的NSUserDefault,这取决于您存储的数据类型,如果您确实注册了,则应与您的注册匹配。(下面是布尔数据类型的示例)

确保将值设置为NSUserDefault后同步,这样它将立即更新,否则它将在有机会时更新

NSUserDefaults.standardUserDefaults().synchronize()
接收值:这将接收布尔值,因为我们设置了布尔值和注册布尔值

let Variable: Bool! = NSUserDefaults.standardUserDefaults().boolForKey("valueName")

在AppDelegate/
ApplicationIDFinishLaunching
中注册键/值对,假设默认情况下
day
true
,而
night
false

let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["day" : true, "night" : false]
defaults.registerDefaults(defaultValues)
然后在需要的任何地方读取值(但始终在注册后):

考虑到根本没有选择

将值保存到您喜欢的任何位置(最好是在
应用程序willterminate中)

同步
行可以省略

由于
白天
似乎总是与
夜间
相反,一个默认键可能就足够了。

Swift 5的更新:

UserDefaults.standard.set(self?.email, forKey: "email")
UserDefaults.standard.set(self?.password, forKey: "password")
UserDefaults.standard.set(true, forKey: "alreadysignedup")
取回

if (UserDefaults.standard.bool(forKey: "alreadysignedup")){
            if let email1 = UserDefaults.standard.string(forKey: "email") {
                
                self.emaildefault = email1
                
                if let password1 = UserDefaults.standard.string(forKey: "password") {
                    
                    self.passworddefault = password1
                    signIn()
                }
            }
        }

我知道您不应该将用户敏感数据存储在UserDefaults中(使用Keychain),但这只是一个示例。

因此,我必须为GlobalData.nightBool和GlobalData.dayBoolAnd创建一个变量,如果您想要或单独使用它,我应该为ValueName添加什么,因为您想检查它以查看值并相应地更改背景,对吗?对于
valueName
任何与您所做的和您想要接收的内容相匹配的内容。@Lucho:
valueForKey
是不合适的。改用指定的方法
boolforky:/setBool:forKey:
。Swift bridges
Bool
NSNumber
自动连接到ICE one,您还可以使用
GlobalData.dayBool
作为布尔值。很好,瓦迪安。我会投票的:)@FarhadNežad你现在没有时间帮我做一些与此相关的事情,是吗?
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(GlobalData.dayBool, forKey("day")
defaults.setBool(GlobalData.nightBool, forKey("night")
defaults.synchronize()
UserDefaults.standard.set(self?.email, forKey: "email")
UserDefaults.standard.set(self?.password, forKey: "password")
UserDefaults.standard.set(true, forKey: "alreadysignedup")
if (UserDefaults.standard.bool(forKey: "alreadysignedup")){
            if let email1 = UserDefaults.standard.string(forKey: "email") {
                
                self.emaildefault = email1
                
                if let password1 = UserDefaults.standard.string(forKey: "password") {
                    
                    self.passworddefault = password1
                    signIn()
                }
            }
        }