#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)`