2017-07-19 2 views
0

J'ai un UIAlertController qui prend l'entrée de l'utilisateur. Je veux ajouter le texte que l'utilisateur a entré dans un tableau et enregistrer ce tableau dans l'utilisateur par défaut. Le problème est que le texte nouvellement entré remplace le texte entré précédemment. Donc je pense que ça ne sauve pas dans le tableau.Ajouter et enregistrer l'entrée UItextField au tableau

C'est ce que j'ai essayé jusqu'à présent:

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

Vous écrivez un tableau d'une chaîne à chaque fois. Cela remplace tout ce qui a pu être là avant. – rmaddy

+0

@ rmaddy merci pour votre réponse, je @Micheal réponse pour résoudre mon problème. –

Répondre

0

L'erreur est ici que la création d'une toute nouvelle gamme, annexant une valeur, et l'écrire à UserDefaults sous la clé « Gratitude » se toujours Ecraser Quoi qu'il en soit et remplacez-le par votre tableau d'éléments unique. Si vous souhaitez ajouter dynamiquement des éléments supplémentaires à votre tableau stocké dans UserDefaults, vous devrez accéder d'abord:

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

print(myArray) 

Je vous suggère également de stocker votre clé dans une constante, de sorte que vous pouvez être sûr que vous êtes accéder à la bonne valeur chaque fois que vous demandez un objet:

let myArrayKey = "Gratitude" 

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

print(myArray) 

Faites-moi savoir si cela a du sens.

+0

@ Micheal Fourre, merci beaucoup. Fait parfaitement sens, ça marche maintenant. –