2017-01-22 5 views
1

Ich bin auf diesem jetzt für Stunden und Stunden stecken geblieben, ich kann einfach nicht herausfinden, wie es geht und ich bekomme Tunnel Vision damit brauche ich Hilfe. Also hier sind die Knochen meiner App hoffe, Sie können helfen ...Quiz-App: Speichern von ausgewählten Quiz-Fragen mit NSUserDefaults und Anzeige in einem anderen View-Controller

Ich baue eine Quiz-App. Ich habe den Quizteil in Arbeit, das heißt, ich habe eine Struktur erstellt und einen Frage- und Antwortabschnitt definiert. Ich zeige dann die Fragen auf dem Bildschirm an und blende die Antwort aus, bis der Benutzer die Antworttaste für die Enthüllung drückt. Die Benutzer können nach links oder rechts wischen, um zwischen den Fragen vor- oder zurückzublättern.

Ich möchte integrieren, den Benutzer in der Lage zu sein, einige Fragen zu speichern und zu ihnen später in einem anderen Ansichtscontroller zurückzukommen. Wenn die Schaltfläche zum Speichern geklickt wird, möchte ich, dass die Frage gespeichert und in den gespeicherten View-Controller gestellt wird. Ich will es in Form einer Frage, damit ich den Benutzer alle gespeicherten Fragen durchblättern lassen kann. Ich habe versucht, mit NSUserDefaults zu speichern.

Der Code für die Ansicht Fragen Controller:

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) 
} 

, die den Code für die Fragen und die Fragen zu den Benutzern angezeigt werden. Jetzt möchte ich die ausgewählte Frage speichern, wenn auf die Schaltfläche Speichern geklickt wird. Ich brauche das gespeichert, damit ich diese gespeicherten Fragen in einem anderen Ansichts-Controller präsentieren kann und den Benutzer ermöglicht, ihre gespeicherten Fragen durchzublättern. Wie mache ich es?

+0

Mögliche dup licate [Speichern einer benutzerdefinierten SWIFT-Klasse mit NSCoding in UserDefaults] (http://stackoverflow.com/questions/26469457/saving-custom-swift-class-with-nscoding-to-userdefaults) – Emptyless

+0

ein Hinweis: Schreiben Sie alle Variablen mit camelCased mit kleingeschriebenem Anfangsbuchstaben. Schreibe Protokoll/Klassennamen CamelCased mit Großbuchstaben ersten Buchstaben – muescha

+0

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

Antwort

1

Wenn Sie nur Zeichenfolge Typ speichern und abrufen möchten: -

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 

OR,

Wenn Sie ein Array von Objekt

speichern möchten, und abrufen
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 
Verwandte Themen