从共享的 Userdefaults 获取值时崩溃

Crash when getting value from shared Userdefaults

我使用共享 Userdefaults 从父 iOS 应用程序获取值到 iOS14 小部件扩展。 一切似乎都正常,我从未见过崩溃,不确定小部件是否会崩溃,但是,崩溃分析说:

Swift 运行时失败:在展开光学值时意外发现 nil。

该行是我从共享 Userdefault 获取值的地方,因此以下代码的最后一行:

struct QuitSmokingWidgetEntryView : View {
var entry: Provider.Entry

let myString:String = UserDefaults(suiteName: "group.com.xxx.xxx.widgetsharing")?.value(forKey: "myKey") as! String

正如我所说,一切似乎都没有崩溃,但我做错了什么 Xcode 崩溃分析告诉我该行发生了很多崩溃?如何解决?

感谢帮助!

当使用 ! 强制展开时,如果值为 nil(或者使用 as! 如果转换失败),你总是 运行 崩溃的风险。

在这种情况下,您可以这样做:

let myString:String = UserDefaults(suiteName: "group.com.xxx.xxx.widgetsharing")?.string(forKey: "myKey") ?? "Default value"

使用 string(forKey:) 避免了转换为 String 的需要,然后如果 none 在 UserDefaults.