Ios SQLite.swift:在活动搜索中点击UITableViewCell时,由于强制展开零值,应用程序崩溃

Ios SQLite.swift:在活动搜索中点击UITableViewCell时,由于强制展开零值,应用程序崩溃,ios,swift,sqlite.swift,Ios,Swift,Sqlite.swift,我已经在我的ViewController中添加了一个UISearchBar,其中还有一个UITableView,它是由来自SQLite数据库的数据使用“feed”的 搜索工作正常,搜索时所有结果均正确显示。通过单击一个TableViewCell调用DetailView也可以正常工作,但是当我在活动搜索过程中单击一个单元格时,应用程序崩溃 奇怪的是:它在模拟器中工作正常,没有崩溃,但在我的物理设备上却不行。我正在使用最新的XCode 9和XCode 9测试版,并在iOS 11.3或11.4中启动该

我已经在我的
ViewController
中添加了一个
UISearchBar
,其中还有一个
UITableView
,它是由来自SQLite数据库的数据使用“feed”的

搜索工作正常,搜索时所有结果均正确显示。通过单击一个
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!)
}

在我找到错误的来源后,我会回答我自己的问题

我的问题中的
ViewController
中没有出现错误。它发生在
DetailViewController
中的
viewDidLoad()
中,我从
SQLite
数据库中获取了要在细节中显示的缺失数据

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

要获取一行的列值,其中您已经知道另外两个值,您需要从双
过滤器
中选择
a
binding
。事情是这样的:

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

没有错误,不再崩溃。

为什么要强制展开可选参数?这需要修正。要么删除参数中的
,要么正确处理
v
的nil值。我怀疑这是崩溃的原因,但当搜索文本更改时,您永远不会更新
filteredDates
。您可能需要创建一个包含名称和日期的结构
bankInfo
;然后在银行里放满这样的例子。这样,您的筛选就会更简单,只需筛选一个数组来创建Filteredbank,而不是试图使两个数组(Filteredbank和filteredDates)保持同步。@rmaddy谢谢,但我已经浏览了代码中的所有选项和强制展开,我想我不知道在哪里可以仔细查看。我改变了其中的一些,并测试了其他一些方法,但结果相同(崩溃)。“你能再给我一个提示看什么吗?”格拉克斯说,谢谢。你说得对-这不是崩溃的原因,但我以前测试过struct,因为我是初学者,所以无法将数组填充为struct或struct as array,或者不管它叫什么。所以我决定把它留到将来,当我能够理解a)这是什么,b)这甚至是:)@Aeger我指的是
func值(v:Binding?->a{return value(v!)}
,你说的就是错误所在。
let wantedValue = try! database.scalar(history.select(valueLookingFor).filter(knownValue1 == firstKnownValue && knownValue2 == secondKnownValue))