我正在尝试创建记住我的功能,为此我必须使用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()
}
保存记住的值,但不保存电子邮件和密码。
答案 0 :(得分:0)
这里是结构
struct defaultsKeys {
static let email = ""
static let pass = ""
static let remember = "0"
}
您已将email
和pass
定义为空白,而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
呢?只需使用setBool
和boolForKey
代替setString
和stringForKey
!