2017-04-20 3 views
0

J'ai un tableau contenant plusieurs questions et une fois qu'il affiche les questions, il est supprimé de l'index pour ne plus être affiché. Le problème est qu'une fois l'application redémarrée, elle ne l'enregistre pas. Je dois être en mesure de le sauvegarder afin qu'il ne montre pas une question déjà affichée.Enregistrement de la matrice personnalisée sur les valeurs par défaut de l'utilisateur

Voici le tableau:

questions = [question(question: "The Average Adult Human Body Contains 206 Bones", answers:["True","False"], answer: 0), 
       question(question: "Bees Have One Pair Of Wings", answers: ["True", "False"], answer: 1), 
       question(question: "The Shanghi Tower Is The Tallest Building In The World", answers: ["True", "False"], answer: 1), 
       question(question: "1024 Bytes Is Equal To 10 Kilobytes", answers: ["True", "False"], answer: 1)].....Plus More 

Voici où je prends puis supprimer la question:

func pickQuestion() { 
    if questions.count > 0 { 
     questionNumber = Int(arc4random_uniform(UInt32(questions.count))) 
     questionLabel.text = questions[questionNumber].question 
     answerNumber = questions[questionNumber].answer 

     for i in 0..<trueorfalse.count { 
      trueorfalse[i].setTitle(questions[questionNumber].answers[i], for: UIControlState.normal) 
     } 
     //Here is where the question is removed from the array. 
     questions.remove(at: questionNumber) 
    } 
} 

Merci.

+0

Vérifiez la réponse à cette question: http://stackoverflow.com/questions/25179668/how-to-save-and-read-array-of-array-in-nsuserdefaults-in-swift. –

+0

comment ajouter un tableau dans userdefault? – KKRocks

+0

Vous devez utiliser l'archiveur de clés pour stocker ce type de données dansNUtilisateur par défaut – KavyaKavita

Répondre

0

réponse Trouvé à Apple Developer Website puis converti en rapide.

D'abord, j'archivés avec NSKeyedArchiver puis enregistré à UserDefaults:

questions.remove(at: questionNumber) 
//Archiving Custom Object Array Into NSKeyedArchiver And Then Saving NSData To UserDefaults 
let theData = NSKeyedArchiver.archivedData(withRootObject: questions) 
UserDefaults.standard.set(theData, forKey: "questionData") 

Je récupérai dans viewDidLoad par désarchivage avec NSKeyedUnarchiver il a obtenu de UserDefaults:

override func viewDidLoad() { 
     super.viewDidLoad() 
     let theData: Data? = UserDefaults.standard.data(forKey: "questionData") 
     if theData != nil { 
      questions = (NSKeyedUnarchiver.unarchiveObject(with: theData!) as? [question])! 
     } 
} 
1

Une meilleure pratique consiste à stocker l'index de question en cours au lieu de supprimer l'élément du tableau. Stockez l'index dans UserDefaults, puis récupérez-le et utilisez-le pour la prochaine fois que l'utilisateur lancera votre application.

exemple:

UserDefaults.standard.set(index, forKey: "saved_index") 

Cela se produira à chaque fois est montré une nouvelle question à l'utilisateur.

Lorsque l'utilisateur lance revenir à l'application et que vous voulez afficher la question qu'il avait arrêté, vous utiliserez:

let index = UserDefaults.standard.integer(forKey: "saved_index") 

Utilisation:

//questions is an Array with objects 
let q1 = questions[index] 
let questionLabel = q1.question 
+0

Comment lier cet index au tableau? – Username

+0

// questions est un tableau avec des objets let q1 = questions [index]; laissez questionLabel = q1.question; –