后台线程更新变量并导致索引超出范围swift ios

时间:2016-07-10 00:36:47

标签: ios swift asynchronous indexoutofboundsexception

我有一个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} { }尺寸很大。

1 个答案:

答案 0 :(得分:0)

正如您所解释的那样,索引越界的原因是indexPath.row不再符合更新search_results的大小。

您可以通过检查search_results.count是否大于indexPath.row来阻止此问题。如果它不大于indexPath.row,则触发结果重新加载,例如,如果您正在使用UICollectionView,则调用collectionView.reloadData()。 (无需访问search_results[indexPath.row]