我检查nsdictionary中的对象是否为nil并且我得到了错误的响应 - 为什么?

时间:2016-10-15 17:48:31

标签: ios swift nsdictionary

如果用户点击了按钮,我想存储在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,为什么我看到用户按下按钮的消息?

1 个答案:

答案 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]似乎是零