2016-08-10 1 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(genderDefault != "male" || genderDefault != "female") 
     { 
      genderAlert() 
     } 
+1

Что такое 'genderDefault'? Когда вы его устанавливаете, вы относитесь к нему как к словарю. Когда вы проверяете его, вы обрабатываете его как строку. Вам нужно показать больше кода. Кроме того, в вашем случае, если вы хотите, и '&&', поскольку он не может одновременно быть как мужчиной, так и женщиной. Или вы можете использовать == вместо! = С или || – Paulw11

+0

Как бы вы исправили genderDefault. Я не использую его нигде. @ Paulw11 – Steve

+2

Я не думаю, что он сломан. Я думаю, что ваша логика if нарушена, но вы не указали, откуда эти переменные исходят или получают свои значения, поскольку вы не указали этот код. – Paulw11

ответ

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

Что бы вы ни делали, вы должны установить 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

Смежные вопросы