【发布时间】:2017-07-07 16:34:09
【问题描述】:
我添加了一个表格视图和一个搜索栏(以编程方式)。我想显示过滤后的结果,所以我创建了一个数组(称为:todoTitle),其中包含我的 todo 活动的标题(我有一个单独的对象,它的属性之一是标题)。我使用 updateSearchResults 方法,并在其中使用过滤器方法返回正确的待办事项。为了检查数组是否为空,我在该函数内部编写代码来打印每个数组内部的待办事项。这是我在 updateSearchResults(for:) 函数中的代码
//filtering through todos' titles
filteredTodos = self.todosTitle.filter({ (title: String) -> Bool in
if title.lowercased().contains((self.searchController.searchBar.text?.lowercased())!) {
return true
} else {
print ("S \(todosTitle)")
print ("t \(title)")
print (filteredTodos)
return false
}
})
//updating the results TableView
self.resultsController.tableView.reloadData()
}
``
todosTitle 数组不是空的,所以我不明白为什么我的 filtersTodos 是空的。有谁知道为什么会发生这种情况?
【问题讨论】:
-
打印结果数组
filteredTodos在闭包内没有多大意义。 -
你应该打印 self.searchController.searchBar.text 吗?安慰和检查。它会阻塞,这可能是原因。
-
filteredTodos在过滤器返回之前不会被设置为过滤器的结果。只是为了清楚 -
为什么
self.searchController.searchBar.text?.lowercased()被()包围?这是不必要的,使它看起来像一个元组。 -
@adev 当第二个表视图应该显示搜索结果时出现问题(错误:意外发现 nil)。这样做是因为它的行数和每个单元格的内容是基于为空的 filtersTodos 数组的内容。我试过打印 self.searchController.searchBar.text?在 else 子句中进行控制台并打印字母,直到我按下活动标题内的字母。在这种情况下,它会抛出一个关于 nil 的错误。
标签: swift uitableview swift3 uisearchbar searchbar