2017-02-15 52 views
0

Я могу перечислить данные в таблице. Когда я выбираю строку и пытаюсь передать другой контроллер представления с указанием конкретных данных, связанных с моей нажатой ячейкой, он не смог бы это сделать. Я не смог сохранить данные «selectedMeal» в функции prepareforsegue, она всегда возвращает []. Я думаю, моя основная проблема заключается в выборе ячейки и отправке в эту ячейку для подготовки к функции segue. Возможно, это проблема в функции DispatchQueue.main.async.Использование функции executeSeguewIdentifier в динамических значениях Tableview

* Когда я пытаюсь перейти к статическим данным, он отлично работает.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    if let cell = tableView.cellForRow(at: indexPath) { 
     cell.accessoryType = .checkmark; 

     DispatchQueue.main.async { 
      self.performSegue(withIdentifier: "gotoOrderDetail", sender: self) 
     } 
    } 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if (segue.identifier == "gotoOrderDetail") { 
     let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController 
     let selectedMeal = selectedCells.map { (index: Int) -> SavedMeal in 
      return savedMeal[index] 
     } 
     DestViewController.mealarray = selectedMeal 
    } 
} 
+1

Почему вы используете DispatchQueue.main.async? –

ответ

1

Попробуйте использовать этот код

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

if (segue.identifier == "gotoOrderDetail") { 
    let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController 
    let path = self.tableView.indexPathForSelectedRow()! // get the selected indexPath 
    DestViewController.mealarray = savedMeal[path.row] 
} 
} 
+0

он отлично работает, спасибо большое! – gozdebal

0

Try использовать параметр Sender

вы можете вы так:

self.performSegue(withIdentifier: "gotoOrderDetail", sender: indexPath) 

, а затем в подготовке (для Segue: отправитель ?)

if (segue.identifier == "gotoOrderDetail") { 
    let DestViewController : OrderDetailListViewController = segue.destination as! OrderDetailListViewController 
    let index = sender as! Int 
    DestViewController.mealarray = savedMeal[index] 
} 

p/s: вам не нужно использовать диспетчерскую очередь в этом случае