我有一个textField,每当用户在textField中键入一个新字符并向用户动态显示搜索结果时,它就会执行服务器请求。它们存储在search_results
数组中。我还在数组上运行以下代码行,以确定是否有任何值出现两次。
let duplicate_array = (search_results.filter{ $0.name == search_results[indexPath.row].name })
问题是如果我输入的速度足够快,search_results
数组会从后台线程更新,我会在此代码上遇到indexOutOfBounds
异常,因为indexPath.row
不再适合更新后的search_results
的大小。有什么方法可以防止这种情况发生,我已经延迟了搜索查询的执行,以便每隔0.3
秒执行一次,而不是更频繁地执行,但是如果{{1} { }尺寸很大。
答案 0 :(得分:0)
正如您所解释的那样,索引越界的原因是indexPath.row
不再符合更新search_results
的大小。
您可以通过检查search_results.count
是否大于indexPath.row
来阻止此问题。如果它不大于indexPath.row
,则触发结果重新加载,例如,如果您正在使用UICollectionView,则调用collectionView.reloadData()
。 (无需访问search_results[indexPath.row]
。