Ошибка UIStoryboardSegue с selectedIndexPath

#ios #swift

#iOS #swift

Вопрос:

У меня возникла проблема с моим кодом swift 3 segue. Я убедился, что все подключено в раскадровке, и искал похожие проблемы с swift 3. Это конкретные строки кода, с которыми я получаю ошибки:

 meals[selectedIndexPath.row] = meal
 

и

 tableView.reloadRowsAtIndexPaths([selectedIndexPath], withRowAnimation: .None)
 

полный блок кода перехода выглядит следующим образом:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Show Detail" {
        let mealDetailViewController = segue.destination as!
        MealViewController
        // Get the cell that generated this segue
        if let selectedMealCell = sender as? MealTableViewCell {
            let indexPath = tableView.indexPath(for: selectedMealCell)!
            let selectedMeal = meals[indexPath.row]
            mealDetailViewController.meal = selectedMeal
        }
    }
    else if segue.identifier == "AddItem" {
    }
}

@IBAction func unwindToMealList(sender: UIStoryboardSegue) {
    if let sourceViewController = sender.source as?
        MealViewController, let meal = sourceViewController.meal {
        if let selectedIndexPath = tableView.indexPathsForSelectedRows {
            // Update an existing meal.
            meals[selectedIndexPath.row] = meal
            tableView.reloadRowsAtIndexPaths([selectedIndexPath], withRowAnimation: .None)
        } else {
            // Add a new meal
            let newIndexPath = IndexPath(row: meals.count, section: 0)
            meals.append(meal)
            tableView.insertRows(at: [newIndexPath], with: .bottom)
        }
    }
}
 

Комментарии:

1. в чем ошибка?

Ответ №1:

Поскольку вы не указали точную ошибку, я предполагаю, что
это:

if let selectedIndexPath = tableView.indexPathsForSelectedRows {

должно быть:

if let selectedIndexPath = tableView.indexPathsForSelectedRows.last {

Делая это, вы получите только один indexPath из массива indexPaths.

Комментарии:

1. Спасибо за вашу помощь. Это помогло. Я также изменил эти 2 строки на `питание [(selectedIndexPath как indexPath).row] = питание TableView.reloadRows(по адресу: [selectedIndexPath], с: .none)`