首页 > 解决方案 > 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))

标签: iosswiftsqlite.swift

解决方案


在找到错误的根源后,我正在回答我自己的问题。

我的问题内部没有发生错误ViewController。它发生在viewDidLoad()我从数据库DetailViewController中获取要在详细信息中显示的丢失数据的地方SQLite

这是经过研究和检查SQLite.swift的GitHub的解决方案:

要获取您已经知道其他两个值的行的列值,您需要selecta bindingfrom a double filter。就像这样:

let wantedValue = try! database.scalar(history.select(valueLookingFor).filter(knownValue1 == firstKnownValue && knownValue2 == secondKnownValue))

没有错误,不再崩溃。


推荐阅读