2016-08-10 3 views
1

Je veux seulement que l'alerte apparaisse si la variable "genderDefault" n'a pas encore été affectée.NSUserDefault non sauvegardé

Ce code est supposé enregistrer le choix de l'utilisateur:

func genderAlert() 
    { 
     let alertController = UIAlertController(title: "Quick Question", message: "What's your gender?", preferredStyle: UIAlertControllerStyle.Alert) 
     let okAction = UIAlertAction(title: "Male", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 
     NSLog("Male Pressed") 
      self.genderDefault.setValue("male", forKey: "gender") 
     } 
     let cancelAction = UIAlertAction(title: "Female", style: UIAlertActionStyle.Default) { 
     UIAlertAction in 
     NSLog("Female Pressed") 
      self.genderDefault.setValue("female", forKey: "gender") 
     } 
     alertController.addAction(okAction) 
     alertController.addAction(cancelAction) 
     self.presentViewController(alertController, animated: true, completion: nil) 
    } 

C'est le instruction if qui contrôle si l'alerte apparaît:

if(genderDefault != "male" || genderDefault != "female") 
     { 
      genderAlert() 
     } 
+1

Qu'est-ce 'genderDefault'? Lorsque vous le définissez, vous le traitez comme un dictionnaire. Lorsque vous le testez, vous le traitez comme une chaîne. Vous devez montrer plus de code. Aussi, dans votre si vous voulez un et '&&' car il ne peut pas être à la fois masculin et féminin en même temps. Ou vous pouvez utiliser == au lieu de! = Avec ou || – Paulw11

+0

Comment corrigeriez-vous genderDefault. Je ne l'utilise nulle part ailleurs. @ Paulw11 – Steve

+2

Je ne pense pas que ce soit cassé. Je pense que votre logique si est cassée, mais vous n'avez pas montré d'où viennent ces variables ou obtenir leurs valeurs puisque vous n'avez pas montré ce code – Paulw11

Répondre

4

Swift 3

let genderDefault = UserDefaults.standard 
genderDefault.set(value: AnyObject?, forKey: String) // SET 
genderDefault.object(forKey: String)     // GET 

Swift 2

let genderDefault = NSUserDefaults.standardUserDefaults() 
genderDefault.setObject("female", forKey: "gender") // SET 
if let gender = genderDefault.stringForKey("gender"){ // GET 
    if((gender as! String) != "male" || (gender as! String) != "female") 
    { 
     genderAlert() 
    } 
} 
0

Qu'est-ce que vous fassiez, vous devez définir userDefaults.synchronize() enfin pour que userDefaults devrait venir de savoir que maintenant il doit sauver

let userDefaults = NSUserDefaults.standardUserDefaults() 
userDefaults.setValue("female", forKey: "gender") 
userDefaults.synchronize() // don't forget this!!!! 
+0

A-t-il résolu votre problème @Caleb – gurmandeep

+3

'.synchronize' n'est plus nécessaire. –

+0

Ok, je préfère l'utiliser :) – gurmandeep