我在ViewController
中添加了一个UISearchBar
,里面还有一个UITableView
,它由使用SQLite.Swift的SQLite数据库中的数据">馈送"。
搜索有效,搜索时所有结果都正确显示。通过单击TableViewCell
调用 DetailView 也可以正常工作,但是当我在活动搜索期间单击单元格时,应用程序崩溃。
奇怪的是:它在模拟器中工作正常,不会崩溃,但在我的物理设备上却没有。我使用的是最新的XCode 9和XCode 9测试版,并且正在iOS 11.3或11.4中启动该应用程序。
我已经尝试了几件事,但我只是无法弄清楚导致崩溃的原因。我正在粘贴整个ViewController
.我已经标记了使用代码的部分,这些代码取自添加的框架/扩展。
错误说:
"线程 1:致命错误:解开可选值时意外发现 nil。">
这是错误在SQLite.swift
中引用的部分:
func value<A: Value>(_ v: Binding?) -> A {
return value(v!)
}
我想知道nil
的价值在哪里。
这是我的代码:感谢您的提示和帮助
编辑:我已经编辑了代码,因为错误没有发生在活动窗口的ViewController
,而是发生在单击TableViewCell
后应显示的DetailViewController
中。这是发生错误的行:
此代码应查找数据库中名称和日期与给定变量匹配的行,以选择该行中的名称:
let nameOfBank = try! database.scalar(table.filter(tableColumnName == cell?.textLabel?.text && tableColumnDate == cell?.detailTextLabel?.text).select(bankName))
找到错误来源后,我正在回答自己的问题。
错误没有发生在我问题中的ViewController
中。它发生在viewDidLoad()
DetailViewController
中,我从SQLite
数据库中获取了要显示在详细信息中的缺失数据。
以下是研究和检查SQLite.swift
GitHub 后的解决方案:
要获取一行的列值,而您已经知道另外两个值,您需要从双filter
中select
binding
。这是这样的:
let wantedValue = try! database.scalar(history.select(valueLookingFor).filter(knownValue1 == firstKnownValue && knownValue2 == secondKnownValue))
没有错误,不再崩溃。