Ich entwickle eine Quiz-App und sobald Sie eine Frage richtig beantworten, wechselt der View-Controller zu einem anderen View-Controller, der den Benutzer darüber informiert, dass die Frage richtig ist und auf eine Schaltfläche klickt, um fortzufahren. Wenn ich jedoch den Simulator starte, werden die Daten nicht gespeichert, sobald sie zum nächsten View-Controller weitergeleitet werden. Sobald der Benutzer eine Frage richtig beantwortet, möchte ich, dass die Frage nicht erneut gestellt wird. Sobald Sie jedoch eine Frage richtig beantworten und zum View-Controller wechseln, der Sie auffordert, einen fortzusetzen, drücken Sie die Taste, um zum ursprünglichen View-Controller zu wechseln. Der Benutzer erhält dann Fragen, die er bereits beantwortet hat. Wie kann ich dafür sorgen, dass der View-Controller den Benutzer auffordert, die Daten vom ursprünglichen View-Controller zu speichern, um sicherzustellen, dass dem Benutzer keine Fragen gestellt werden, die er bereits richtig beantwortet hat?Wie speichere ich Daten zwischen View Controllern?
Hier ist mein Code für das Original-View-Controller:
import UIKit
class ViewController: UIViewController {
var questionList = [String]()
func randomQuestion() {
//random question
if questionList.isEmpty {
questionList = Array(QADictionary.keys)
}
let rand = Int(arc4random_uniform(UInt32(questionList.count)))
questionLabel.text = questionList[rand]
//matching answer values to go with question keys
var choices = QADictionary[questionList[rand]]!
questionList.remove(at: rand)
//create button
var button:UIButton = UIButton()
//variables
var x = 1
rightAnswerBox = arc4random_uniform(4)+1
for index in 1...4
{
button = view.viewWithTag(index) as! UIButton
if (index == Int(rightAnswerBox))
{
button.setTitle(choices[0], for: .normal)
}
else {
button.setTitle(choices[x], for: .normal)
x += 1
}
randomImage()
}
}
let QADictionary = ["Who is Thor's brother?" : ["Atum", "Loki", "Red Norvell", "Kevin Masterson"], "What is the name of Thor's hammer?" : ["Mjolinr", "Uru", "Stormbreaker", "Thundara"], "Who is the father of Thor?" : ["Odin", "Sif", "Heimdall", "Balder"]]
//wrong view segue
func wrongSeg() {
performSegue(withIdentifier: "wrongViewSegue", sender: self)
}
//proceed screen
func rightSeg() {
performSegue(withIdentifier: "rightSeg", sender: self)
}
//variables
var rightAnswerBox:UInt32 = 0
var index = 0
//Question Label
@IBOutlet weak var questionLabel: UILabel!
//Answer Button
@IBAction func buttonAction(_ sender: AnyObject) {
if (sender.tag == Int(rightAnswerBox))
{
print ("Correct!")
}
else if (sender.tag != Int(rightAnswerBox)) {
wrongSeg()
print ("Wrong!")
questionList = []
}
randomQuestion()
}
override func viewDidAppear(_ animated: Bool)
{
randomQuestion()
}
//variables
var seconds = 15
var timer = Timer()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
Hier Code View-Controller segues es einmal Sie richtig eine Frage beantworten:
import UIKit
class CorrectView: UIViewController {
//correct answer label
@IBOutlet weak var correctLbl: UILabel!
//background photo
@IBOutlet weak var backgroundImage: UIImageView!
func backToQuiz() {
performSegue(withIdentifier: "continueSeg", sender: self)
}
@IBAction func `continue`(_ sender: Any) {
backToQuiz()
}
override func viewDidLoad() {
super.viewDidLoad()
}
Mit segues für Frage Seiten bestehen bleiben, ist falsch. Wenn Sie 20 Fragen haben, würden Sie 20 verschiedene View-Controller für jede Frage haben. Bekomme ich es richtig? –
nein alle meine Fragen sind in einem Array in einem View-Controller gespeichert –
verwenden Sie einfach zwei Arrays, die das Ergebnis speichert welche Frage richtig beantwortet wird und welche falsch und während des Endergebnisses vergleichen Sie einfach Ihre beiden neuen Array mit ersten Frage-Array oder wenn Sie wollen nur Punkte als Ergebnis deklarieren, verwenden Sie einfach das Array der korrekten Antwortliste –