ios - SQLite.swift:由于在活动搜索中点击 UITableViewCell 时强制解包 nil 值,应用程序崩溃
问题描述
我已经添加了 a UISearchBar
,其中ViewController
也有 a UITableView
,它由使用SQLite.Swift的 SQLite 数据库中的数据“馈送”。
搜索有效,搜索时所有结果都正确显示。通过单击调用 DetailView也可以正常工作,但是当我在活动搜索期间TableViewCell
单击单元格时,应用程序崩溃。
奇怪的事情:它在模拟器中一切正常而不会崩溃,但在我的物理设备上却没有。我正在使用最新的 XCode 9 和 XCode 9 beta 版本,并且正在 iOS 11.3 或 11.4 中启动该应用程序。
我已经尝试了几件事,但我无法弄清楚导致崩溃的原因。我正在粘贴整个ViewController
. 我已经标记了使用代码的部分,这些代码取自添加的框架/扩展。
错误说:
“线程 1:致命错误:在展开可选值时意外发现 nil。”
这是错误所指的部分SQLite.swift
:
func value<A: Value>(_ v: Binding?) -> A {
return value(v!)
}
我想知道那个nil
值在哪里。
这是我的代码:感谢您的提示和帮助
编辑:我已经编辑了代码,因为错误没有发生在ViewController
活动窗口中,而是在DetailViewController
单击TableViewCell
. 这是发生错误的行:
此代码应在数据库中找到名称和日期与给定变量匹配的行,以在该行中选择名称:
let nameOfBank = try! database.scalar(table.filter(tableColumnName == cell?.textLabel?.text && tableColumnDate == cell?.detailTextLabel?.text).select(bankName))
解决方案
在找到错误的根源后,我正在回答我自己的问题。
我的问题内部没有发生错误ViewController
。它发生在viewDidLoad()
我从数据库DetailViewController
中获取要在详细信息中显示的丢失数据的地方SQLite
。
这是经过研究和检查SQLite.swift
的GitHub的解决方案:
要获取您已经知道其他两个值的行的列值,您需要select
a binding
from a double filter
。就像这样:
let wantedValue = try! database.scalar(history.select(valueLookingFor).filter(knownValue1 == firstKnownValue && knownValue2 == secondKnownValue))
没有错误,不再崩溃。
推荐阅读
- django - ListAPIView 中的 get_queryset 返回空白列表
- python - 如何处理 TensorFlow 中的错误“证书验证失败:证书已过期”?
- typescript - 我可以在 TypeScript 中声明可以通过点符号访问的嵌套类型组吗?
- python - python中的REST API——数据永远不会回来
- asp.net - Asp.net 应用程序中的 Owin 上下文抛出错误 - IDX20804
- laravel - 每次运行作业时单独的日志文件 laravel
- python - Python OpenCV 多处理适用于 MacOS 和 Windows,但不适用于 Ubuntu
- rust - 如何在 Rust Actix 中传递 ScyllaDB 连接
- javascript - 如何根据单元格值插入 javascript 以更改 Flask WTF jinja2 表格数据单元格中的单元格 CSS 类?
- reactjs - React-Redux 在主页和购物车页面增加和减少项目数量