Фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения при получении значения по умолчанию
Я новичок в программировании на iOS, и я пытался получить значение из пользовательских настроек по умолчанию. У меня есть некоторые предпочтения, и я пытаюсь получить их на view controller.swift в viewDidLoad()
функция.
Вот мой код:
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)"
Я предполагал, потому что не было никакого значения по умолчанию, поэтому я набрал его. Но это все еще не удается. Может кто-нибудь мне помочь?
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
чеки. Если нет, вы должны использовать условные выражения для тех значений, которые могут быть равны нулю.
Вы должны делать это для всего, что вы берете из пользовательских настроек по умолчанию, потому что вы не можете быть уверены, что всегда будет правильный тип объекта для вашего ключа.
РЕДАКТИРОВАТЬ:
Пояснение: as
Ключевое слово используется для приведения типов. Вы можете прочитать об этом здесь.
as?
преобразуется в необязательный, так что если вы приведете значение к типу, используя as?
код по-прежнему работает, если значение было ноль или не может быть приведено. Позже вы можете проверить дополнительные функции, используя if let
заявление, чтобы увидеть, если они равны нулю или содержат значение.