Восстановите значение NSUserDefaults для выбранного ключа для index.row - PullRequest
0 голосов
/ 04 мая 2018

у меня есть массив 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's и UIButton для возможности изменения информации пользователя

Когда пользователь передает текст в UIextField's Я хочу восстановить значение для ключа

Как я могу удалить выбранное имя и сохранить новое имя для правильного пользователя ??

Абхираджсине Тхакору ответ:

Я обновляю код в 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)

Но это не сохранить

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете получить свой полный массив из 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
...