【发布时间】:2021-03-25 16:18:04
【问题描述】:
我使用共享的 Userdefaults 将值从父 iOS 应用程序获取到 iOS14 Widget 扩展。 一切似乎都正常,我从未见过崩溃,不确定小部件是否会崩溃,但是,崩溃分析说:
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 崩溃分析告诉我该行发生了许多崩溃,我做错了什么?如何解决?
感谢您的帮助!
【问题讨论】:
-
您强制将值
value(forKey: "myKey") as! String转换为字符串,如果.value返回 nil 或返回的不是字符串必然会崩溃,为什么不使用if let或guard let来安全展开 -
如果我在 Xcode 之前放 let 说:一行上的连续声明必须用 ';' 分隔如果我按下修复它看起来像---如果;让 myString:String = UserDefaults(suiteName: --- 这显然不起作用
-
if let myString = UserDefaults(suiteName: "group.com.xxx.xxx.widgetsharing")?.value(forKey: "myKey") as? String { //your code to use myString here }怎么样 -
感谢您的回答,Xcode 不会让我在之前放 if 或 guard,我用谷歌搜索了 - 可能是因为它没有功能?
-
它是 SwiftIUI,以前从未使用过,对它来说真的很新,它是一个结构,我使用那行代码的 EntryView...
标签: swift swiftui crash widget nsuserdefaults