2015-06-19 91 views
-1

每次我安裝它的時候我的應用程序崩潰,但只在第一次..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爲零。所以我認爲這是因爲if語句中的NSUserDefaults。所以我的第一個想法是把save.synchronize這var save = NSUserDefaults.standardUserDefaults()但沒有奏效:\

回答

1

你的應用程序崩潰,因爲在這條線:

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

您正在使用武力展開操作。在展開它們之前,您需要確保這些值不是nil

The Swift Programming Language: The Basics

嘗試使用!訪問不存在的可選值會觸發運行時錯誤。在使用之前,務必確保可選項包含非零值!強迫 - 解開其價值。

您可以使用零合併運算提供默認值:

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

作爲一個文體的音符,你的實例變量應該以小寫字母開頭。只有類型名稱應該以大寫字母開頭。

+0

他們不是零,國家和城市從數據庫中採取將永遠不會有零 – markutus

+0

行,但ExtensionPeriod是零。 –