Swift - UISearchBar:EXC_BREAKPOINT(代码=1,子代码=0x10297eabc)
Swift - UISearchBar: EXC_BREAKPOINT (code=1, subcode=0x10297eabc)
我有一个数组,我在这个数组中进行搜索:
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text != "" {
filteredData.removeAll(keepingCapacity: false)
let textToSearch = searchController.searchBar.text!
filteredData = feedItems.filter({([=12=].DesenNo?.lowercased().contains(textToSearch.lowercased()))!})
listTableView.reloadData()
} else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}
当我点击搜索栏并输入任何字母或数字时,Xcode 在筛选行上给出以下错误:
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x10297eabc)
这也是我在调试屏幕上得到的:
[2169:828959] +[CATransaction synchronize] called within transaction
我无法理解问题并能够解决它。互联网上没有太多东西。希望大家帮帮我,谢谢!
可能的问题是您对可选值使用强制展开。试试这个
func updateSearchResults(for searchController: UISearchController) {
if let textToSearch = searchController.searchBar.text, textToSearch.isEmpty == false {
// update search results
} else {
// clear search results
}
}
通过这种方法,您可以确定 textToSearch
不是 nil
且不为空。
更新
这一行还有一个force-unwrap
filteredData = feedItems.filter {
([=11=].DesenNo?.lowercased().contains(textToSearch.lowercased()))!
}
您的实体可能没有 DesenNo
属性。如果他们不这样做,你强制解包会导致崩溃。像这样过滤你的数组
let lowercasedSearchline = textToSearch.lowercased()
filteredData = feedItems.filter {
// Do not include items with empty DesenNo field
guard let desenNo = [=12=].DesenNo else { return false }
// filter items that has that field filled
return desenNo.lowercased().contains(lowercasedSearchline)
}
我有一个数组,我在这个数组中进行搜索:
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text != "" {
filteredData.removeAll(keepingCapacity: false)
let textToSearch = searchController.searchBar.text!
filteredData = feedItems.filter({([=12=].DesenNo?.lowercased().contains(textToSearch.lowercased()))!})
listTableView.reloadData()
} else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}
当我点击搜索栏并输入任何字母或数字时,Xcode 在筛选行上给出以下错误:
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x10297eabc)
这也是我在调试屏幕上得到的:
[2169:828959] +[CATransaction synchronize] called within transaction
我无法理解问题并能够解决它。互联网上没有太多东西。希望大家帮帮我,谢谢!
可能的问题是您对可选值使用强制展开。试试这个
func updateSearchResults(for searchController: UISearchController) {
if let textToSearch = searchController.searchBar.text, textToSearch.isEmpty == false {
// update search results
} else {
// clear search results
}
}
通过这种方法,您可以确定 textToSearch
不是 nil
且不为空。
更新
这一行还有一个force-unwrap
filteredData = feedItems.filter {
([=11=].DesenNo?.lowercased().contains(textToSearch.lowercased()))!
}
您的实体可能没有 DesenNo
属性。如果他们不这样做,你强制解包会导致崩溃。像这样过滤你的数组
let lowercasedSearchline = textToSearch.lowercased()
filteredData = feedItems.filter {
// Do not include items with empty DesenNo field
guard let desenNo = [=12=].DesenNo else { return false }
// filter items that has that field filled
return desenNo.lowercased().contains(lowercasedSearchline)
}