从 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中使用NSData
和NSArray
。有原生类型。
任何粗心的感叹号都会导致应用程序崩溃。
错误发生是因为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 = []
}
}
我的应用程序在设备上启动时崩溃了。
开始时,我所有的数组都是空的。
错误:
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中使用NSData
和NSArray
。有原生类型。
任何粗心的感叹号都会导致应用程序崩溃。
错误发生是因为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 = []
}
}