按下取消按钮时,将显示服务器的最新食谱。
问题是,如果我在两个"页面" 之间滚动,然后按"取消"按钮,该应用将崩溃。
我的猜测是发生这种情况,因为该应用程序将尝试以与搜索结果单元相对应的索引填充单元格(该索引将高于第一个列表中的结果(。
搜索结果和主列表中的配方是相同的,因为它是模拟服务器(您可以查看控制台以更好地了解正在提出的请求(。视频: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]
,您将在日志中看到的"致命:索引之外的范围错误"。
确保行的数量对应于数组中的配方数量。