为 index.row 的选定键重新保存 NSUserDefaults 值

Resave NSUserDefaults value for selected key for index.row

我有数组 NSUserDefaults 类型:

    let userValue = ["name": self.nameLbl.text ?? "", "lastName": self.lastNameLbl.text ?? "", "city": cityLbl.text ?? ""] as! [String : String]
    var userArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []
    UserDefaults.standard.set(userArray, forKey: "userInfo")


  And save this array in first `ViewController` 

ViewController 我在 UITAbleView

显示这个数组
 class ...

 var userInfo = [[String:String]]()

 override func viewDidLoad() {
    super.viewDidLoad()
 userInfo = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
 let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserTableViewCell

 var userItem = userInfo[indexPath.row]
 cell.nameLbl?.text = item["name"]
 cell.lastNameLbl.text = item["lastName"]
 cell.cityLbl.text = item["city"]

UITAbleView 我有 3 个 UIextField'sUIButton 有机会更改用户信息

当用户在 UIextField's 中传递文本时,我想重新保存键的值

如何删除选定的名称并将新名称保存给正确的用户??

致 Abhirajsinh Thakore 的回答:

我正在更新 cellForRowAt 中的代码

var userItem = userInfo[indexPath.row]
 cell.nameLbl?.text = item["name"]
 cell.lastNameLbl.text = item["lastName"]
 cell.cityLbl.text = item["city"]

item["name"] = cell.nameLbl?.text


  var maArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []

  item.updateValue(cell.nameLbl?.text, forKey: "name")
        maArray.append(item)

但是没有保存

您可以从 Userdefaults

获取完整的数组

现在要做的是从 textField 获取新值并将其替换为特定的 indexPath.row

例如:

var userInfo = [[String:String]]()

 let data  = userInfo[indexPath.row]
 data["name"] = txtName.text
 data["address"] = txtAddress.text

现在将这个完整的数组存储回userDefaults,你每次都会得到更新的结果。

希望对您有所帮助。

参考代码编辑

这样做:

var maArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []

    let innerData = maArray[indexPath.row]

    innerData["name"] = cell.nameLbl?.text
    innerData["lastName"] = cell.lastNameLbl.text
    innerData["city"] = cell.cityLbl.text


    // And save the maArray back to userDefaults