2017-04-18 37 views
0

我的應用程序使用分頁,以顯示錶中的數據。在每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 
} 

編輯:我認爲這個問題沒有什麼關係分頁,因爲這在兩個頁面之間進行滾動也會發生。

+0

你在重新加載表之前或之後在哪裏設置「searchController.isActive」? –

回答

0

您的陣列中有多少種食譜recipes[]?您使用的數組索引大於數組大小。數組是「基於零」的,即如果數組總共有6個項目,則有效數組索引爲0 ... 5。如果您嘗試訪問recipes[7],您將看到日誌中顯示的「致命:索引超出範圍錯誤」。

確保行數對應於數組中的配方數量。

+0

每次我按下取消都會有0個,因爲我想用最新的食譜進行更新,之後我開始填充它,所以會有5個。作爲一個附註,我認爲這個問題沒有任何做與分頁,因爲這也發生在兩頁之間不滾動。 –

+0

是func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int) - > Int在取消按鈕後再次調用?如果沒有,你會得到searchrecipes的數量。取消搜索後,您可能需要重新加載表格。 – swiftynifty

0

通過修改第一個如果與if searchController.isActive == false && indexPath.row < recipes.count && recipes.count != 0固定雖然我不確定這是做到這一點的最佳方法。問題仍然存在。