在代码中我有按钮和标签 我希望从标签中捕获文本到UserDefaults,但是当我按下 - >在控制台打印" nil"
btn代码:
@IBAction func tapAddBtn(_ sender: UIButton) {
let def = UserDefaults.standard
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
maAr?.append(["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text])
def.set(maAr, forKey: "cartt")
def.synchronize()
print(UserDefaults.standard.object(forKey: "cartt"))
答案 0 :(得分:0)
第一次通过这种方法,有可能是带有键的数组" cartt"从nil
检索时为UserDefaults
。因此,如果是这种情况,则需要使用数组初始化值。
let newValues = ["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text]
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
if maAr == nil {
maAr = [newValues]
} else {
maAr?.append(newValues)
}
def.set(maAr, forKey: "cartt")
print(UserDefaults.standard.object(forKey: "cartt"))
答案 1 :(得分:0)
您必须将默认值设置为maAr
:
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [[String: Any]]()
否则,当您点击该按钮时,UserDefaults.standard.array(forKey: "cartt")
尚未设置,因此maAr
获取nil
。
之后,maAr?
不附加任何内容,因为可选链接失败。
最后,在def.set(maAr, forKey: "cartt")
中,您将nil
分配回UserDefaults
。