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

时间:2018-06-24 08:07:07

标签: ios swift nsuserdefaults

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

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

错误:

  

线程1:致命错误:在展开可选值swift时意外发现nil

enter image description here

我该如何解决?

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]
}

1 个答案:

答案 0 :(得分:3)

首先请遵守命名约定,例如,变量名以小写字母开头

var cardColorLogo = [UIColor]()

第二,不要在Swift中使用NSDataNSArray。有本机类型。

任何不小心写的感叹号都可能使应用程序崩溃

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

可选绑定结果并在失败时返回空数组

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