2017-01-22 2 views
1

Я застрял на этом сейчас часами и часами, я просто не могу понять, как это сделать, и я получаю туннельное видение с этим, поэтому мне нужна помощь. Итак, вот кости моего приложения надеются, что вы сможете помочь ...Quiz app: сохранение выбранных вопросов викторины с использованием NSUserDefaults и отображение их в другом контроллере представления

Я создаю приложение для викторины. У меня есть часть викторины, то есть я создал структуру и определил раздел вопросов и ответов. Затем я отображаю вопросы на экране и скрываю ответ до тех пор, пока пользователь не нажмет кнопку ответа на выявление. Пользователи могут прокручивать влево или вправо, чтобы идти вперед или назад между вопросами.

Я хочу включить пользователя, позволяющего пользователю сохранять некоторые вопросы и возвращаться к ним в другом контроллере представления на более позднем этапе. Когда нажата кнопка сохранения, я хочу, чтобы вопрос сохранялся и помещался в сохраненный контроллер просмотра. Я хочу, чтобы это было в форме вопроса, поэтому я могу позволить пользователю просмотреть все их сохраненные вопросы. Я пытался сэкономить, используя NSUserDefaults.

Код для Вопросов просмотр контроллера:

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

То есть код для вопросов и отображения вопросов пользователей. Теперь я хочу сохранить выбранный вопрос, когда нажата кнопка сохранения. Мне нужно это сохранить, поэтому я могу представить эти сохраненные вопросы в другом контроллере представления и разрешить пользователю просматривать свои сохраненные вопросы. Как мне это сделать?

+0

Возможный дубликат лицензирование [Сохранение пользовательского SWIFT-класса с использованием NSCoding для UserDefaults] (http://stackoverflow.com/questions/26469457/saving-custom-swift-class-with-nscoding-to-userdefaults) – Emptyless

+0

Примечание: напишите все переменные с помощью camelCased с первой буквой в нижнем регистре. Запись имен протоколов/классов CamelCased с прописной первой буквой – muescha

+0

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

ответ

1

Если вы хотите, чтобы сохранить и восстановить снабжать струной, тетивой и т.п. типа: -

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 

ИЛИ

Если вы хотите, чтобы сохранить и восстановить массив объекта

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 
Смежные вопросы