如果用户点击了按钮,我想存储在NSUserDefaults
信息中。
我有两个按钮,一个有+1值,另一个有-1。
当用户按下其中一个按钮时,我就是这样做的:
if (self.defaults.objectForKey("pressedButtons") == nil){
let currentButtonId:[String:String] = [self.pressedButtons:vote]
self.defaults.setObject(currentButtonId, forKey: "pressedButtons")
self.defaults.synchronize()
} else {
var pressedButtons:[String:String] = self.defaults.objectForKey("pressedButtons") as! [String:String]
pressedButtons[self.button_id] = vote
self.defaults.setObject(pressedButtons, forKey: "pressedButtons")
self.defaults.synchronize()
}
上面代码中的 vote
是一个字符串值,可以是"1"
或"-1"
。
现在,当用户回到面板时,我会检查他是否已按下按钮。这是我检查它的方式:
if (self.defaults.objectForKey("pressedButtons") != nil){
if (self.defaults.objectForKey("pressedButtons")![currentButtonId] != nil) {
print("user already pressed")
print(self.defaults.objectForKey("pressedButtons")![currentButtonId])
} else {
print("USER didn't press the button yet")
}
} else {
print("USER didn't press the button yet for sure")
}
我经常看到的输出是:
user already pressed
nil
从这一行开始:
print(self.defaults.objectForKey("pressedButtons")![currentButtonId])
打印nil
,为什么我看到用户按下按钮的消息?
答案 0 :(得分:1)
在获取
时,始终将此对象强制转换为[String:String]
let variable = self.defaults.objectForKey("pressedButtons") as! [String:String]
现在这是[String:String]
现在相应地获取您的值
这并不知道self.defaults.objectForKey("pressedButtons")
是类型为[String:String]
的对象。所以,首先对它进行类型转换然后再使用。所以self.defaults.objectForKey("pressedButtons")![currentButtonId]
似乎是零