添加并保存UItextField输入到数组

问题描述:

我有一个UIAlertController接受用户输入。我想将用户输入的文本添加到数组,并将该数组保存为用户默认值。问题是,新输入的文本不断取代先前输入的文本。所以我认为这不是保存在阵列中。添加并保存UItextField输入到数组

这是我试过到目前为止:

func presentAlert() { 
    let confirmAction = UIAlertAction(title: "Save", style: .default) { (_) in 
     if let field = alertController.textFields { 
      // This is how I tried to create the array to hold input text 
      let textFieldArray = field as [UITextField] 
      let text = textFieldArray[0].text 

      var myArray = [""] 
      myArray.append(String(describing: text!)) 
      UserDefaults.standard.set(myArray, forKey: "Gratitude") 
      UserDefaults.standard.synchronize() 

      print(myArray) 

     } else { 
      print() 
     } 
    } 

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in } 

    alertController.addTextField { (textField) in 

     //textField.placeholder = "" 
    } 

    alertController.addAction(confirmAction) 
    alertController.addAction(cancelAction) 

    self.present(alertController, animated: true, completion: nil) 
} 
+0

您每次都写一个字符串的数组。这取代了之前可能存在的任何东西。 – rmaddy

+0

@ rmaddy感谢您的回复,我@Micheal回复解决了我的问题。 –

这里的错误是,创建一个全新的阵列,附加一个值,下键“知恩图报”将其写入UserDefaults总是覆盖无论什么,并用你的单个元素数组替换它。如果你想在UserDefaults动态添加额外的元素,你的存储阵列,您必须先访问:

var myArray = UserDefaults.standard.array(forKey: "Gratitude") ?? [] 
myArray.append(String(describing: text!)) 
UserDefaults.standard.set(myArray, forKey: "Gratitude") 

print(myArray) 

我也建议存储在你不断的关键,这样可以确保你在每次请求对象时访问正确的值:

let myArrayKey = "Gratitude" 

var myArray = UserDefaults.standard.array(forKey: myArrayKey) ?? [] 
myArray.append(String(describing: text!)) 
UserDefaults.standard.set(myArray, forKey: myArrayKey) 

print(myArray) 

让我知道这是否合理。

+0

@ Micheal Fourre,非常感谢。现在完成它的工作非常有意义。 –