2017-01-22 1 views
1

Je suis coincé là-dessus pendant des heures et des heures, je n'arrive pas à comprendre comment le faire et je reçois une vision tunnel avec ça, j'ai besoin d'aide. Voici donc les os de mon application, j'espère que vous pourrez m'aider ...Application de quiz: Enregistrement de questions-réponses sélectionnées à l'aide de NSUserDefaults et affichage dans un autre contrôleur de vue

Je suis en train de créer une application Quiz. J'ai la partie Quiz qui fonctionne, c'est-à-dire que j'ai créé une structure et défini une section de questions et réponses. Ensuite, j'affiche les questions à l'écran et cache la réponse jusqu'à ce que l'utilisateur appuie sur le bouton de réponse. Les utilisateurs peuvent balayer vers la gauche ou la droite pour avancer ou reculer entre les questions.

Je veux incorporer laisser l'utilisateur être en mesure d'enregistrer quelques questions et de revenir à eux dans un autre contrôleur de vue à un stade ultérieur. Lorsque vous cliquez sur le bouton Enregistrer, la question doit être enregistrée et placée dans le contrôleur de vue enregistré. Je le veux sous la forme d'une question afin que je puisse laisser l'utilisateur feuilleter toutes les questions sauvegardées. J'essayais de sauvegarder en utilisant NSUserDefaults.

Le code pour les questions Vue Contrôleur:

import Foundation 
import UIKit 

    struct Question { 
var Question : String! 
var Answers : String! 
} 

class Defence: UIViewController { 


@IBOutlet weak var labelForQuestion: UILabel! 
@IBOutlet weak var textBoxForAnswer: UITextView! 

var QNumber : Int = 0 

override func viewDidLoad() { 

    //hiding answer 
    textBoxForAnswer.hidden = true 

    //components for swiping left 
    let swipeLeft = UISwipeGestureRecognizer(target: self, action: "respondLeft:") 
    swipeLeft.direction = .Left 
    view.addGestureRecognizer(swipeLeft) 

    //components for swiping Right 
    let swipeRight = UISwipeGestureRecognizer(target: self, action: "respondRight:") 
    swipeRight.direction = .Right 
    view.addGestureRecognizer(swipeRight) 




    Questions = [ 

     Question(Question: "what colour is the sky", Answers: "blue"), 

     Question(Question: "what colour is the grass", Answers: "green", 

     Question(Question: "what colour is the sea", Answers: "blue", 

     Question(Question: "what is 1 plus 1", Answers: "2"), 

     Question(Question: "what is 2 plus 2", Answers: "4"), 

     Question(Question: "what is 3 plus 3", Answers: "6"), 

    ] 

    pickQuestion() 
} 



func pickQuestion() { 

    if Questions.count > 0 { 

     Num.text = String(QNumber + 1) 

     labelForQuestion.text = Questions[QNumber].Question 
     textBoxForAnswer.text = Questions[QNumber].Answers 

    } 

} 

//Action for left swipe 
func respondLeft(gesture: UIGestureRecognizer) { 
    if QNumber == (Questions.count - 1) { 
     //if last question do nothing so it doesnt go out of bounds 
    } else { 
     QNumber++; 
     pickQuestion() 
    } 
} 


//Action for Right Swipe 
func respondRight(gesture: UIGestureRecognizer) { 
    if QNumber == 0 { 
     //if last question do nothing so it doesnt go out of bounds 
    } else { 
     QNumber--; 
     pickQuestion() 
    } 
} 


@IBAction func showAnswer(sender: AnyObject) { 
    textBoxForAnswer.hidden = false 
} 


@IBAction func save(sender: AnyObject) { 
****Have tried many things here with NSUserDefaults and appending to a dictionary so I could see the saved question in the other view controllers. this is where I need help**** 
} 


@IBAction func sections(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

C'est le code pour les questions et l'affichage des questions aux utilisateurs. Maintenant, je veux enregistrer la question sélectionnée lorsque le bouton Enregistrer est cliqué. J'ai besoin de cela enregistré afin que je puisse présenter ces questions enregistrées dans un autre contrôleur de vue et permis à l'utilisateur de feuilleter leurs questions sauvegardées. Comment fait-on ça?

+0

Possible dup Licence de [Enregistrement de la classe SWIFT personnalisée avec NSCoding à UserDefaults] (http://stackoverflow.com/questions/26469457/saving-custom-swift-class-with-nscoding-to-userdefaults) – Emptyless

+0

note: écrire toutes les variables avec camelCased avec la première lettre en minuscule. Écrivez les noms de protocole/classe CamelCased avec la première lettre majuscule – muescha

+0

https://github.com/raywenderlich/swift-style-guide#naming – muescha

Répondre

1

Si vous souhaitez enregistrer et récupérer type chaîne: -

var Question: String! 

//save questions from here {func save() } 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setValue(questions, forKey: "key_questions") 

//retrieve questions from another view controller 
let defaults = NSUserDefaults.standardUserDefaults() 
let quest = defaults.stringForKey("key_questions") 
print("quest") //questions saved before from first view controller 

OU,

Si vous souhaitez enregistrer et récupérer un tableau de objet

var Question: [[String:AnyObject]]! 

//save questions from here {func save() } 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setValue(questions, forKey: "key_questions") 

//retrieve questions from another view controller 
let defaults = NSUserDefaults.standardUserDefaults() 
let quest = defaults.objectForKey("key_questions") as? [[String:AnyObject]] 
print("quest") //questions saved before from first view controller