Swift-UISearchBar:EXC_BREAKPOINT(代码= 1,子代码= 0x10297eabc)

时间:2018-09-18 16:30:39

标签: ios swift xcode uisearchbar

我有一个数组,正在这个数组中进行搜索:

func updateSearchResults(for searchController: UISearchController) {
    if searchController.searchBar.text != "" {
        filteredData.removeAll(keepingCapacity: false)
        let textToSearch = searchController.searchBar.text!
        filteredData = feedItems.filter({($0.DesenNo?.lowercased().contains(textToSearch.lowercased()))!})
        listTableView.reloadData()
    } else {
        filteredData.removeAll(keepingCapacity: false)
        listTableView.reloadData()
    }
}

当我点击搜索栏并键入任何字母或数字时,Xcode在过滤行上会出​​现以下错误:

  

线程1:EXC_BREAKPOINT(代码= 1,子代码= 0x10297eabc)

这也是我在“调试”屏幕上看到的内容:

  

[2169:828959] + [CATransaction同步]在事务内调用

我无法理解问题并能够解决。互联网上没有很多东西。希望您能帮助我,谢谢!

1 个答案:

答案 0 :(得分:1)

可能的问题是,您正在使用强制展开来获取可选值。试试这个

func updateSearchResults(for searchController: UISearchController) {
    if let textToSearch = searchController.searchBar.text, textToSearch.isEmpty == false {
        // update search results
    } else {
        // clear search results
    }
}

使用这种方法,可以确保textToSearch不是nil并且不为空。

更新

此行还有一个强制展开

filteredData = feedItems.filter {
    ($0.DesenNo?.lowercased().contains(textToSearch.lowercased()))!
}

您的实体可能没有DesenNo属性。如果不这样做,则强行打开包装会导致崩溃。这样过滤数组

let lowercasedSearchline = textToSearch.lowercased()
filteredData = feedItems.filter {
    // Do not include items with empty DesenNo field
    guard let desenNo = $0.DesenNo else { return false }

    // filter items that has that field filled
    return desenNo.lowercased().contains(lowercasedSearchline)
}