2016-08-10 42 views
1

我只想要显示警报是否变量“genderDefault”尚未分配。NSUserDefault没有保存

此代码是假设保存用户的选择:

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

这是if语句,控制警报是否显示出来:

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

什么是'genderDefault'?当你设定它时,你会像字典一样对待它。当你测试它时,你把它当作一个字符串来对待。你需要显示更多的代码。另外,如果你想要一个和'&&',因为它不能同时是男性和女性。或者你可以使用==而不是!= with或|| – Paulw11

+0

你会如何解决genderDefault。我不会在其他地方使用它。 @ Paulw11 – Steve

+2

我不认为它是坏的。我认为你的if逻辑被破坏了,但是你没有显示这些变量来自哪里或者得到它们的值,因为你没有显示该代码 – Paulw11

回答

4

斯威夫特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

你做什么都必须在最后设置userDefaults.synchronize(),使userDefaults应该来知道,现在它具有节省

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

它是否解决了你的问题@Caleb – gurmandeep

+3

'.synchronize'不再是必需的。 –

+0

好的,我更喜欢用它:) – gurmandeep