从 UserDefaults (Swift) 加载颜色时应用程序在启动时崩溃

App crashes on start when load colors from UserDefaults (Swift)

我的应用程序在设备上启动时崩溃了。

开始时,我所有的数组都是空的。

错误:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value swift

我该如何解决?

var CName: [String] = [""]

var BarCode: [String] = [""]
var CardNBR: [String] = [""]

var CardColorLogo = [UIColor]()

var UploadDateArray = [NSDate]()

var Comment: [String] = [""]

保存和加载功能

func saveColorLogo() {
    UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: CardColorLogo), forKey: "ColorsKey")
}

func loadColorLogo() {
    let decodedColorsData = UserDefaults.standard.object(forKey: "ColorsKey") as? NSData
    let colorsArray = (NSKeyedUnarchiver.unarchiveObject(with: decodedColorsData! as  Data) as! NSArray)
    CardColorLogo = colorsArray as! [UIColor]
}

首先请遵守变量名以小写字母开头的命名规则 例如

var cardColorLogo = [UIColor]()

其次,不要在Swift中使用NSDataNSArray。有原生类型。

任何粗心的感叹号都会导致应用程序崩溃

错误发生是因为object(forKey returns nil 如果键不存在。顺便说一句,有一个 data(forKey 方法具有相同的行为。

可选绑定结果和return失败时的空数组

func loadColorLogo() {
    if let decodedColorsData = UserDefaults.standard.data(forKey: "ColorsKey"),
        let colorsArray = NSKeyedUnarchiver.unarchiveObject(with: decodedColorsData) as? [UIColor] {
        cardColorLogo = colorsArray
    } else {
        cardColorLogo = []
    }
}