2015-06-19 2 views
-1

мое приложение аварии каждый раз, когда я установил его, но только в первый раз ..Swift NSUserDefaults приложение аварии первый раз

это мой код

var State = save.stringForKey("StateSave") 
    var City = save.stringForKey("CitySave") 
    var Vehicle = save.stringForKey("ModelNumberSave") 
    var ExtensionPeriod = save.stringForKey("ExtensionPeriodChoosed") 
    var Location = "Location" 


    if ExtensionPeriod == nil { 
     var name = "" 
     var FieldChoosed: Void = save.setObject(name, forKey: "ExtensionPeriodChoosed") 
     save.synchronize() 

    } 

    save.synchronize() 
    var DetailNames = ["\(State!)","\(City!)","\(Location)","\(Vehicle!)","\(ExtensionPeriod!)"] 

это крах, потому что говорят, что ExtensionPeriod равна нулю. поэтому я думаю, что это из-за NSUserDefaults в выражении if. Таким образом, моя первая мысль была поставить save.synchronize какой var save = NSUserDefaults.standardUserDefaults() но он не работает: \

ответ

1

Ваше приложение аварий, потому что в этой строке:

var DetailNames = ["\(State!)","\(City!)","\(Location)","\(Vehicle!)","\(ExtensionPeriod!)"] 

вы используете оператор силы UnWrap. Вы должны убедиться, что эти значения не являются nil, прежде чем разворачивать их.

От The Swift Programming Language: The Basics:

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

Вы можете указать значения по умолчанию с помощью оператора всухую коалесцирующий:

var State = save.stringForKey("StateSave") ?? "Texas" 
var City = save.stringForKey("CitySave") ?? "El Paso" 

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

+0

они не являются нилом, государство и город взяты из базы данных, никогда не будет nil – markutus

+0

OK, но ExtensionPeriod - это нуль. –

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