-1

I have a survey form that appear only if the user still didn't answer survey every time the user launch the app. But even if I already answered the survey still its appearing. Here's how I'm doing it

//Get if questionaire is done
let defaults = UserDefaults.standard
if let questionaire_done = defaults.string(forKey: "questionaire_done") {
    print(questionaire_done) // Some String Value
}else {
    performSegue(withIdentifier: "questionaireSegue", sender: nil)
}

UserDefaults.standard.set("yes", forKey: "questionnaire_done") //set the questionnaire as done
Zoe
  • 27,060
  • 21
  • 118
  • 148
user9900611
  • 9
  • 1
  • 5
  • Key name is different "questionaire_done" and "questionnaire_done" how it will work. Set and Get key both name are different please change that first and check. – Hardik Thakkar Jun 20 '18 at 10:29

3 Answers3

1

Store the value in before segue (navigation)

//Get if questionaire is done
let defaults = UserDefaults.standard
if let questionaire_done = defaults.string(forKey: "questionnaire_done")  {
    print(questionaire_done) // Some String Value
}else {
    defaults.set("yes", forKey: "questionnaire_done") //set the questionnaire as done
    performSegue(withIdentifier: "questionaireSegue", sender: nil)
}

If you want to validate your condition then you like

let defaults = UserDefaults.standard
if let questionaire_done = defaults.string(forKey: "questionnaire_done"), questionaire_done == "yes" {
    print(questionaire_done) // Some String Value
}else {
    defaults.set("yes", forKey: "questionnaire_done") //set the questionnaire as done
    performSegue(withIdentifier: "questionaireSegue", sender: nil)
} 
Anbu.Karthik
  • 82,064
  • 23
  • 174
  • 143
1
if let questionaire_done = defaults.string(forKey: "questionaire_done")

has a different key to

UserDefaults.standard.set("yes", forKey: "questionnaire_done")

Spell the keys the same, or better still, use a constant string for the key.

jrturton
  • 118,105
  • 32
  • 252
  • 268
-1

Yes, the key value name should be always same but one more thing - you should write this after any "UserDefaults" operation - either read or write.

UserDefaults.standard.synchronize()

Example -

UserDefaults.standard.set("yes", forKey: "questionnaire_done")
UserDefaults.standard.synchronize()
Rahul Singha Roy
  • 548
  • 1
  • 3
  • 13
  • 3
    You absolutely do not need to do this. It even says so in the docs https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize. All that method does is wait. – jrturton Jun 20 '18 at 13:51