When I try to save to ui colors with userDefaults, Xcode gives me the error : Fatal error: Unexpectedly found nil while unwrapping an Optional value
When I try to save to ui colors with userDefaults, Xcode gives me the error : Fatal error: Unexpectedly found nil while unwrapping an Optional value
我试图让我的应用在设置中保存 UIColors,当我尝试保存背景颜色的设置时,它起作用了。但是当我添加第二个代码块应该允许我保存第二个 UIColor 时,它给了我错误 - 致命错误:在展开可选值时意外发现 nil。谁能告诉我如何正确保存第二个 UIColor 吗?
// First UIColor save - Works
var dd = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour") as! String )
UserDefaults.standard.set(dd.toHexString, forKey: "TheMainUIColour")
let mainBackgroundColour = UserDefaults.standard.value(forKey: "TheMainUIColour") as! String
let color = UIColor(hex: mainBackgroundColour)
self.view.backgroundColor = dd
// Second UIColor Save - Doesnt Work
let dd2: UIColor = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String )
UserDefaults.standard.set(dd2, forKey: "TheMainUIColour2")
let mainBackgroundColour2 = UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String
let color2 = UIColor(hex: mainBackgroundColour2)
问题是
var dd2:UIColor = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String )
它从默认值读取不保存,不要使用!从默认值中读取,因为存储的值可能为 nil ,只需使用 if let 检查它是否存在于默认值中,如果存在则使用它,如果不保存您想要的值,当您再次打开应用程序时它会读取储值
if let saved = UserDefaults.standard.string(forKey: "TheMainUIColour2")
{
var dd = UIColor(hex:saved)
}
else
{
print("No saved color")
let dd = UIColor.red
UserDefaults.standard.set(dd.toHexString, forKey: "TheMainUIColour2")
}
您的代码崩溃是因为没有为键 TheMainUIColour2
设置任何内容,但您随后 force-unwrap 那个 nil
值和您的应用程序崩溃。
你写的代码也没什么意义。您(尝试)加载当前值并从中创建颜色。然后,您不必要地将该值写回用户默认值。然后您再次读取该值作为字符串。然后您再次从字符串中创建颜色。
不要执行所有这些不必要的额外步骤。加载颜色(如果存在),仅此而已。此代码不应设置任何内容。您必须有其他代码来决定使用什么颜色。该代码应将颜色保存为用户默认值。
if let hexColor = UserDefaults.standard.string(forKey: "TheMainUIColour2") {
let color2 = UIColor(hex: hexColor)
// do something with the color
}
我试图让我的应用在设置中保存 UIColors,当我尝试保存背景颜色的设置时,它起作用了。但是当我添加第二个代码块应该允许我保存第二个 UIColor 时,它给了我错误 - 致命错误:在展开可选值时意外发现 nil。谁能告诉我如何正确保存第二个 UIColor 吗?
// First UIColor save - Works
var dd = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour") as! String )
UserDefaults.standard.set(dd.toHexString, forKey: "TheMainUIColour")
let mainBackgroundColour = UserDefaults.standard.value(forKey: "TheMainUIColour") as! String
let color = UIColor(hex: mainBackgroundColour)
self.view.backgroundColor = dd
// Second UIColor Save - Doesnt Work
let dd2: UIColor = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String )
UserDefaults.standard.set(dd2, forKey: "TheMainUIColour2")
let mainBackgroundColour2 = UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String
let color2 = UIColor(hex: mainBackgroundColour2)
问题是
var dd2:UIColor = UIColor(hex: UserDefaults.standard.value(forKey: "TheMainUIColour2") as! String )
它从默认值读取不保存,不要使用!从默认值中读取,因为存储的值可能为 nil ,只需使用 if let 检查它是否存在于默认值中,如果存在则使用它,如果不保存您想要的值,当您再次打开应用程序时它会读取储值
if let saved = UserDefaults.standard.string(forKey: "TheMainUIColour2")
{
var dd = UIColor(hex:saved)
}
else
{
print("No saved color")
let dd = UIColor.red
UserDefaults.standard.set(dd.toHexString, forKey: "TheMainUIColour2")
}
您的代码崩溃是因为没有为键 TheMainUIColour2
设置任何内容,但您随后 force-unwrap 那个 nil
值和您的应用程序崩溃。
你写的代码也没什么意义。您(尝试)加载当前值并从中创建颜色。然后,您不必要地将该值写回用户默认值。然后您再次读取该值作为字符串。然后您再次从字符串中创建颜色。
不要执行所有这些不必要的额外步骤。加载颜色(如果存在),仅此而已。此代码不应设置任何内容。您必须有其他代码来决定使用什么颜色。该代码应将颜色保存为用户默认值。
if let hexColor = UserDefaults.standard.string(forKey: "TheMainUIColour2") {
let color2 = UIColor(hex: hexColor)
// do something with the color
}