2015-07-02 4 views
-1

Обновление: я попытался изменить setValue на setObject, и произошла ошибка. При дальнейшем исследовании с точками останова и LLDB они равны нулю, прежде чем контроллер будет даже представлен. Я не спас их правильно.NSUserDefaults Значение потери в Swift

Я пытаюсь просто сохранить пару строк текста и отобразить их на другом экране с помощью Swift. Я не уверен, почему мне так тяжело. Вот как я пытаюсь сделать это: VC1

@IBAction func registerTapped(sender : AnyObject) 
     // Save the login information 

     let defaults = NSUserDefaults.standardUserDefaults() 

     defaults.setValue(username.text, forKey: "username") 
     defaults.setValue(password.text, forKey: "password") 


     if firstName.text.isEmpty == false { 
      defaults.setValue(firstName.text, forKey: "firstname") 
     } 

     if lastName.text.isEmpty == false { 
      defaults.setValue(lastName.text, forKey: "lastname") 
     } 

     let profileView = ProfileViewController() 
     self.presentViewController(profileView, animated: true, completion: nil) 
    } 
} 

охладиться. Это похоже на правильный способ сохранения строк в UITextFields на основе моих исследований. Итак, я открываю VC2 и попытаться загрузить сохраненный текст в новых UITextField, как и так:

override func viewDidLoad() { 
     super.viewDidLoad() 

     let defaults = NSUserDefaults.standardUserDefaults() 

     username.text = defaults.stringForKey("username") 
     password.text = defaults.stringForKey("password") 

     if let first = defaults.stringForKey("firstname") 
     { 
      firstName.text = first 
     } 
     if let last = defaults.stringForKey("lastname") { 
      lastName.text = last 
     } 
} 

я получаю аварию fatal error: unexpectedly found nil while unwrapping an Optional value. Я часами тренировался в учебных пособиях и не мог для жизни понять, что я делаю неправильно.

Это потому, что это необязательно? Это мой выход LLDB: enter image description here

+0

Использование 'SetObject: forKey:' вместо 'SetValue: forKey:' – AdamPro13

+0

Пробовал что уже, не работает. – John

+0

'defaults.synchronize()'? –

ответ

1

Ваш вопрос не имеет никакого отношения к NSUserDefaults, Что nil ваши метки username, password и т.д. в вашем втором контроллере.

Чтобы добавить второй контроллер и удалите последние две строки в registerTapped, вы должны добавить кнопку segue на свою кнопку (одна с registerTapped).

+0

Спасибо вам, что сработало! :) – John

0

Разбейте свой код на шаги и отлаживайте каждый. Ваш код сработает, если ваша розетка равна нулю или пара ключей/значений не существует. Проверьте, как имя пользователя и пароль (Текстовые поля) не являются нулевыми, а также о том, что результаты дефолты не являются нулевыми:

var text: String? 

text = defaults.stringForKey("username") 
if let text = text 
{ 
    if let username = username 
    { 
    username.text = text 
    } 
    else 
    { 
    println("username field is nil!") 
    } 
} 
else 
{ 
    println("defaults stringForKey("username") = nil!") 
} 

text = defaults.stringForKey("password") 
if let text = text 
{ 
    if let password = password 
    { 
    password.text = text 
    } 
    else 
    { 
    println("password field is nil!") 
    } 
} 
else 
{ 
    println("defaults stringForKey("password") = nil!") 
} 
Смежные вопросы