在搜索栏上滚动和按下取消时,应用程序会崩溃



我的应用程序使用分页以在表中显示数据。在每5种食谱中,我都会使用Alamofire提出一个新请求,以获取数据并将其显示在单元格中。我还有一个搜索栏,该搜索栏使用相同的tableView在中显示搜索数据(并且也使用分页(。

按下取消按钮时,将显示服务器的最新食谱。

问题是,如果我在两个"页面" 之间滚动,然后按"取消"按钮,该应用将崩溃。

我的猜测是发生这种情况,因为该应用程序将尝试以与搜索结果单元相对应的索引填充单元格(该索引将高于第一个列表中的结果(。

搜索结果和主列表中的配方是相同的,因为它是模拟服务器(您可以查看控制台以更好地了解正在提出的请求(。视频:https://www.youtube.com/watch?v=nggzbzty-j4&spfreload=10

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! RecipeTableViewCell
    if searchController.isActive == false {
        cell.loadRecipePreview(recipe: recipes[indexPath.row])
        if indexPath.row == recipes.count - 1 {
            recipeRequest()
        }
    }
    else {
        cell.loadRecipePreview(recipe: searchRecipes[indexPath.row])
        if indexPath.row == searchRecipes.count - 1 {
            recipeSearchRequest()
        }
    }
    return cell
}

编辑:我认为问题与分页无关,因为这在不滚动两页之间也会发生。

通过第一个修改第一个(如果使用if searchController.isActive == false && indexPath.row < recipes.count && recipes.count != 0 Altough(修复,我不确定这是做到这一点的最佳方法。问题仍然开放。

您的数组中有多少个食谱recipes[]?您正在使用大于数组大小的数组索引。数组为"基于零",即如果数组共有6个项目,则有效的数组索引为0 ... 5。如果您尝试访问recipes[7],您将在日志中看到的"致命:索引之外的范围错误"。

确保行的数量对应于数组中的配方数量。

最新更新