在搜索栏

时间:2017-04-18 20:00:54

标签: ios swift uitableview

我的应用程序使用分页来显示表格中的数据。在每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
}

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

2 个答案:

答案 0 :(得分:0)

您的阵列recipes[]中有多少个食谱?您使用的数组索引大于数组大小。数组是“从零开始”的,即如果数组总共有6个项,则有效数组索引为0 ... 5。如果您尝试访问recipes[7],您将在日志中看到“致命:索引超出范围错误”。

确保行数对应于数组中的食谱数量。

答案 1 :(得分:0)

通过使用if searchController.isActive == false && indexPath.row < recipes.count && recipes.count != 0修改第一个if来修复我不确定这是最好的方法。问题仍然存在。