2014-09-30 2 views
1

Я новичок в программировании на iOS, и я пытался получить значение из пользовательских настроек по умолчанию. У меня есть некоторые настройки, и я пытаюсь получить их на контроллере view.swift в функции viewDidLoad().Неустранимая ошибка: неожиданно найден nil во время разворачивания необязательного значения при извлечении по умолчанию

Вот мой код:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    let strName : NSString = defaults.objectForKey("name_preferences") as NSString 
    let strEmail : NSString = defaults.objectForKey("mail_preferences") as NSString 
    let strUser : NSString = defaults.objectForKey("user_preferences") as NSString 

Это врезаться в пусть strName, советуя мне: "fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)" я должен был, потому что не было значение любого по умолчанию, поэтому я напечатал это. Но он все еще терпит неудачу. Может ли кто-нибудь мне помочь?

+0

Откуда вы указали значение по умолчанию, на которое вы ссылаетесь? –

ответ

1

Это означает, что strName не был найден в ваших настройках по умолчанию. попробовать это:

let var0 = defaults.objectForKey("key0") as? NSString 
let var1 = defaults.objectForKey("key1") as? NSString 
let var2 = defaults.objectForKey("key2") as? NSString //... and so on 
if let strName = var0 { 
    //use strName 
} 
if let strEmail = var1 { 
    //use strEmail 
} 

Если все они должны присутствовать в дефолтов пользователя для вашего кода, чтобы правильно функционировать, вы можете гнездо if let чеки. Если нет, вы должны использовать условные обозначения для тех значений, которые могут быть равны нулю.

Вы должны сделать это за все, что вы выберете из пользовательских настроек по умолчанию, потому что вы не можете быть уверены, что всегда будет правильный тип объекта для вашего ключа.

EDIT:

Объяснение: as ключевое слово используется для приведения типа. Вы можете прочитать об этом here.

as? делает необязательным, поэтому, если вы присвоили значение типу с использованием as?, код по-прежнему работает, если значение было нулевым или его нельзя отличить. Вы можете позже проверить опции с помощью оператора if let, чтобы узнать, являются ли они нулевыми или содержат значение.

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

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