如何解决Swift 在尝试从存在的键中获取值时获得 Nil
我不知道为什么我在尝试打印时在 optional 上出现此 nil 错误。有人可以提供任何意见吗?我能够从 aplicationContext 输出值是没有意义的,但是当我尝试从 applicationContext["hearRate"] 获取值时,我得到了 nil。
func session(_ session: WCSession,didReceiveApplicationContext applicationContext: [String : Any]) {
print("didReceiveApplicationContext\n\t\(applicationContext)")
let hrValue = applicationContext["heartRate"] as? String
print(applicationContext["hearRate"])
print(hrValue)
heartRate.text = hrValue
}
console - output
2021-03-10 18:41:04.623716-0700 Trainer+[1824:759737] Metal API Validation Enabled
session active state
didReceiveApplicationContext
["heartRate": 00BPM]
nil
Optional("00BPM")
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file Trainer_/ViewController.swift,line 57
2021-03-10 18:41:04.999001-0700 Trainer+[1824:759754] Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file Trainer_/ViewController.swift,line 57
更新 - 忽略打字错误,发现 IBOutlet 有问题
func session(_ session: WCSession,didReceiveApplicationContext applicationContext: [String : Any]) {
print("didReceiveApplicationContext\n\t\(applicationContext)")
let hrValue = applicationContext["heartRate"] as? String
print(applicationContext["heartRate"])
print(hrValue)
//heartRate.text = hrValue
heartRate.text = "test"
}
2021-03-11 12:45:05.482464-0700 Trainer+[1873:817768] Metal API Validation Enabled
session active state
didReceiveApplicationContext
["heartRate": 91BPM]
Optional(91BPM)
Optional("91BPM")
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file Trainer_/ViewController.swift,line 58
2021-03-11 12:45:05.887523-0700 Trainer+[1873:817966] Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file Trainer_/ViewController.swift,line 58
来自 watchconnectivity 的 func session(didReceiveApplicationContext) 正在按预期工作。我相信我的问题来自我将 heartRate 标签移动到“查看容器”。我在移动标签的同时添加了 watchconnectivity 并假设它会起作用。
这可能需要一个不同的问题,不确定,我如何沿着多个同时可见的视图控制器传递数据。因为我是在 ViewController 上创建会话,所以我还不知道如何将数据传递给其他视图控制器而不将 ViewController 的完整“自我”引用传递给 DetailViewController。来自 Java 和 PHP,我觉得这不是一个好的编码习惯。
我正在考虑扩展/委托和原型。我稍微了解它们,但我目前正在开发一个应用程序,我的主要目标是拥有一个工作原型。我会回来重构代码修复并修复任何漏洞。如果任何有经验的机构可以为我提供任何可靠的资源。厌倦了点击谷歌的下一页,因为我找不到我正在寻找的答案,哈哈。
解决方法
如果您复制并粘贴了您的代码,我认为这只是拼写错误。
您可以尝试更改此行:
print(applicationContext["hearRate"])
到:
print(applicationContext["heartRate"])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。