在代码中,我有按钮和标签,我希望从标签捕获文本到UserDefaults,但是当我在控制台中按->时,打印“0”。
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"))发布于 2018-04-23 13:32:46
第一次通过这个方法,当从nil检索时,键"cartt“的数组有可能是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"))发布于 2018-04-23 13:37:23
必须将默认值设置为maAr
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [[String: Any]]()否则,当您单击该按钮时,UserDefaults.standard.array(forKey: "cartt")尚未设置,因此maAr get nil。
之后,由于可选链接失败,maAr?不会追加任何内容。
最后,在def.set(maAr, forKey: "cartt")中将nil分配给UserDefaults。
https://stackoverflow.com/questions/49982306
复制相似问题