SQLite.swift:由于在活动搜索中点击 UITableViewCell 时强制解包 nil 值,应用崩溃



我在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.swiftGitHub 后的解决方案:

要获取一行的列值,而您已经知道另外两个值,您需要从双filterselectbinding。这是这样的:

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

没有错误,不再崩溃。

相关内容

  • 没有找到相关文章

最新更新