2016-09-06 4 views
0

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

struct defaultsKeys { 
    static let email = "" 
    static let pass = "" 
    static let remember = "0" 
} 

@IBAction func btn_rememberMe(sender: UIButton) { 

    let defaults = NSUserDefaults.standardUserDefaults() 

     if defaults.stringForKey(defaultsKeys.remember) == "0" { 
      defaults.setValue("1", forKey: defaultsKeys.remember) 
      btno_rememberMe.setImage(UIImage(named: "login_tickSelected.png"), forState: .Normal) 
     } 
     else { 
      defaults.setValue("0", forKey: defaultsKeys.remember) 
      btno_rememberMe.setImage(UIImage(named: "login_tickUnselected.png"), forState: .Normal) 
     } 
    defaults.synchronize() 
} 

Код Сохранить Email и Пароль:

let defaults = NSUserDefaults.standardUserDefaults() 
       if defaults.stringForKey(defaultsKeys.remember) == "1" { 

        defaults.setValue(String(self.txt_email.text!), forKey: defaultsKeys.email) 
        defaults.setValue(String(self.txt_pass.text!), forKey: defaultsKeys.pass) 

        print(defaults.stringForKey(defaultsKeys.email)!) 
        print(txt_email.text!) 
       } 
       else { 
        defaults.setValue("", forKey: defaultsKeys.email) 
        defaults.setValue("", forKey: defaultsKeys.pass) 
       } 
       defaults.synchronize() 

код для Обновить данные на экране:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let defaults = NSUserDefaults.standardUserDefaults() 

    if defaults.stringForKey(defaultsKeys.remember) == "0" { 
     btno_rememberMe.setImage(UIImage(named: "login_tickUnselected.png"), forState: .Normal) 
    } 
    else { 
     btno_rememberMe.setImage(UIImage(named: "login_tickSelected.png"), forState: .Normal) 
     txt_email.text = defaults.stringForKey(defaultsKeys.email) 
     txt_pass.text = defaults.stringForKey(defaultsKeys.pass) 
    } 
    defaults.synchronize() 


} 

Это экономия Запоминаем значение, но не адрес электронной почты и пароль.

+2

Потому что вы используете * пустые строки * в качестве ключей для электронной почты и пароля. –

+0

Нет, я добавляю текст в текстовое поле, и я также напечатал его, а текст текстового поля не пуст –

+3

Да: 'defaultsKeys.email' определяется как пустая строка. Поэтому * key * для пользовательских значений по умолчанию является пустой строкой (а не значением). –

ответ

0

Здесь в структуре

struct defaultsKeys { 
    static let email = "" 
    static let pass = "" 
    static let remember = "0" 
} 

вы определили email и pass, как Blank и remember вы назначили его в 0, то почему для remember он хранит значение, а не для других значений.

Чтобы решить это просто изменить структуру, как показано ниже

struct defaultsKeys { 
    static let email = "savedEmailKey" 
    static let pass = "savedPassKey" 
    static let remember = "0" 
} 
0

defaultKeys структура используется для хранения ключи из NSUserDefaults. Я прав? И пустая строка является допустимым ключом? №

Я думаю, вы просто перепутали ключи и значения по умолчанию. Просто измените ключи на что-то значимое:

struct defaultsKeys { 
    static let email = "email" 
    static let pass = "pass" 
    static let remember = "remember" 
} 

Также есть еще одно предложение.

С remember может быть только 0 или 1, вы не должны сохранять его как String. Почему бы не использовать Bool вместо этого? Просто используйте setBool и boolForKey вместо setString и !