defaults.setValue保存值始终为nil string

时间:2016-09-06 06:52:31

标签: ios swift ipad nsuserdefaults remember-me

我正在尝试创建记住我的功能,为此我必须使用NSUserDefaults来保存缓存中的数据。但它总是保存零字符串,请检查我的代码。

struct defaultsKeys {
    static let email = ""
    static let pass = ""
    static let remember = "0"
}

@IBAction func btn_rememberMe(sender: UIButton) {

    let defaults = NSUserDefaults.standardUserDefaults()

        if defaults.stringForKey(defaultsKeys.remember) == "0" {
            defaults.setValue("1", forKey: defaultsKeys.remember)
            btno_rememberMe.setImage(UIImage(named: "login_tickSelected.png"), forState: .Normal)
        }
        else {
            defaults.setValue("0", forKey: defaultsKeys.remember)
            btno_rememberMe.setImage(UIImage(named: "login_tickUnselected.png"), forState: .Normal)
        }
    defaults.synchronize()
}  

保存电子邮件和密码的代码:

let defaults = NSUserDefaults.standardUserDefaults()
                if defaults.stringForKey(defaultsKeys.remember) == "1" {

                    defaults.setValue(String(self.txt_email.text!), forKey: defaultsKeys.email)
                    defaults.setValue(String(self.txt_pass.text!), forKey: defaultsKeys.pass)

                    print(defaults.stringForKey(defaultsKeys.email)!)
                    print(txt_email.text!)
                }
                else {
                    defaults.setValue("", forKey: defaultsKeys.email)
                    defaults.setValue("", forKey: defaultsKeys.pass)
                }
                defaults.synchronize()

在屏幕上重新加载数据的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    let defaults = NSUserDefaults.standardUserDefaults()

    if defaults.stringForKey(defaultsKeys.remember) == "0" {
        btno_rememberMe.setImage(UIImage(named: "login_tickUnselected.png"), forState: .Normal)
    }
    else {
        btno_rememberMe.setImage(UIImage(named: "login_tickSelected.png"), forState: .Normal)
        txt_email.text = defaults.stringForKey(defaultsKeys.email)
        txt_pass.text = defaults.stringForKey(defaultsKeys.pass)
    }
    defaults.synchronize()


}

保存记住的值,但不保存电子邮件和密码。

2 个答案:

答案 0 :(得分:0)

这里是结构

struct defaultsKeys {
    static let email = ""
    static let pass = ""
    static let remember = "0"
}

您已将emailpass定义为空白,而remember已将其分配为0,这就是为什么remember它存储的值而不是其他价值观。

解决它只需改变结构如下

struct defaultsKeys {
    static let email = "savedEmailKey"
    static let pass = "savedPassKey"
    static let remember = "0"
}

答案 1 :(得分:0)

defaultKeys结构用于存储NSUserDefaults。我对吗?并且空字符串是有效密钥吗?否。

我认为你只是混淆了默认值的键和值。只需将密钥更改为有意义的内容:

struct defaultsKeys {
    static let email = "email"
    static let pass = "pass"
    static let remember = "remember"
}

另外,这是另一个建议。

由于remember只能是0或1,因此不应将其另存为String。为什么不使用Bool呢?只需使用setBoolboolForKey代替setStringstringForKey