I am making a quiz app. So basically I have scores and high scores and I want to display and store the results on the main View Controller.
I can display the results but can't save them. Please help! Also I want that if I quit my app on question 2, it will restart from there instead of the isInitialViewController. Any help for these two topics will be very appreciated.
Below is the code for the main profile which is loading the scores but once you quit the app and reload it, the numbers disappear:
import UIKit
import Parse
import ParseUI
import CoreData
import Foundation
class UserProfileViewController: UIViewController {
@IBOutlet var scoreLabelUser: UILabel!
var scoringString = String()
@IBOutlet var HighScoreLabelUser: UILabel!
var highscoreString = String()
@IBOutlet var HighScoreLabel: UILabel!
var HighscoreInt = 0
override func viewDidLoad() {
super.viewDidLoad()
var highScoreDefault2 = NSUserDefaults.standardUserDefaults()
if (highScoreDefault2.valueForKey("EASYHIGHSCORE") != nil)
{
HighscoreInt = highScoreDefault2.valueForKey("EASYHIGHSCORE") as! NSInteger
//highscoreString = highScoreDefault2.valueForKey("EASYHIGHSCORE") as! String
HighScoreLabel.text = NSString(format: "%i", HighscoreInt) as String
}
assignScores()
}
func assignScores() {
scoreLabelUser.text = NSString(format: "%@", scoringString) as String
HighScoreLabelUser.text = NSString(format: "%@", highscoreString) as String
HighScoreLabel.text = "\(highscoreString)"
var highScoreDefault2 = NSUserDefaults.standardUserDefaults()
highScoreDefault2.setValue(HighscoreInt, forKey: "EASYHIGHSCORE")
}
}
I have the second ViewController which actually have the quiz and is calculating the scores and highscores.
//
// EasyQuizViewController.swift
// Quiz
import UIKit
import CoreData
import AVFoundation
class EasyQuizViewController: UIViewController {
@IBOutlet var sequence: UILabel!
@IBOutlet var questionLabel: UILabel!
@IBOutlet var Button1: UIButton!
@IBOutlet var Button2: UIButton!
@IBOutlet var Button3: UIButton!
@IBOutlet var Button4: UIButton!
@IBOutlet var scoreLabel: UILabel!
@IBOutlet var highscoreLabel: UILabel!
var CorrectAnswer = String()
var questionNumber = 0
var score = 0
var highScore = 0
override func viewDidLoad() {
super.viewDidLoad()
var highScoreDefault = NSUserDefaults.standardUserDefaults()
if (highScoreDefault.valueForKey("HIGHSCORE") != nil)
{
highScore = highScoreDefault.valueForKey("HIGHSCORE") as! NSInteger!
highscoreLabel.text = NSString(format: "%i", highScore) as String
}
generateNewNumber()
// Do any additional setup after loading the view.
}
func generateNewNumber() {
questionNumber += 1
switch(questionNumber) {
case 1:
sequence.text = "\(questionNumber)/50"
questionLabel.text = "Which is the country with the most people?"
Button1.setTitle("United States of America", forState: UIControlState.Normal)
Button2.setTitle("South Africa", forState: UIControlState.Normal)
Button3.setTitle("China", forState: UIControlState.Normal)
Button4.setTitle("India", forState: UIControlState.Normal)
CorrectAnswer = "3"
break
case 2:
sequence.text = "\(questionNumber)/50"
questionLabel.text = "Which is the planet closest to the Sun?"
Button1.setTitle("Venus", forState: UIControlState.Normal)
Button2.setTitle("Jupiter", forState: UIControlState.Normal)
Button3.setTitle("Earth", forState: UIControlState.Normal)
Button4.setTitle("Mercury", forState: UIControlState.Normal)
CorrectAnswer = "4"
break
default:
var alert = UIAlertView(title: "Finished", message: "Your quiz has been completed. Click Okay to view scores.", delegate: self, cancelButtonTitle: "Ok")
alert.show()
//println("\(score)")
//println("\(highScore)")
scoreLabel.text = NSString(format: "%i", score) as String
if (score > highScore) {
highScore = score
highscoreLabel.text = NSString(format: "%i", highScore) as String
}
var highScoreDefault = NSUserDefaults.standardUserDefaults()
highScoreDefault.setValue(highScore, forKey: "HIGHSCORE")
self.profileScreen()
break
}
}
@IBAction func Button1Action(sender: AnyObject) {
if (CorrectAnswer == "1")
{
score += 1
generateNewNumber()
}
else {
generateNewNumber()
}
}
@IBAction func Button2Action(sender: AnyObject) {
if (CorrectAnswer == "2")
{
score += 1
generateNewNumber()
}
else {
generateNewNumber()
}
}
@IBAction func Button3Action(sender: AnyObject) {
if (CorrectAnswer == "3")
{
score += 1
generateNewNumber()
}
else {
generateNewNumber()
}
}
@IBAction func Button4Action(sender: AnyObject) {
if (CorrectAnswer == "4")
{
score += 1
generateNewNumber()
}
else {
generateNewNumber()
}
}
@IBAction func BackBtn(sender: AnyObject) {
self.performSegueWithIdentifier("backToProfile", sender: self)
}
func profileScreen() {
self.performSegueWithIdentifier("backToProfile", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var destinationViewController : UserProfileViewController = segue.destinationViewController as! UserProfileViewController
//println("\(scoreLabel)")
//println("\(highscoreLabel)")
destinationViewController.scoringString = NSString(format: "%i", score) as String
destinationViewController.highscoreString = NSString(format: "%i", highScore) as String
//destinationViewController.HighscoreInt = NSString(format: "%i", highScore) as String
//destinationViewController.HighscoreInt = (highScore) as NSInteger
}
}
You should store your NSUserDefaults when the user quits your app:
func applicationDidEnterBackground(application: UIApplication) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.synchronize()
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.