2017-02-15 5 views
0

テーブルビューでデータをリストできます。私が行を選択し、私の押されたセルに関連する特定のデータを表示して別のビューコントローラを渡そうとすると、それを作ることができませんでした。 prepareforsegue関数でdata "selectedMeal"変数を格納できませんでしたが、常に[]を返します。 私の主な問題は、セルを選択し、このセルにセグ機能を準備することです。恐らく、DispatchQueue.main.async関数に問題があります。動的値のperformSeguewithIdentifier関数の使用テーブルビュー

*静的なデータに渡そうとするとうまくいきます。

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

あなたはこのようなことができSenderパラメータ

使用してみてください

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

このコードを使用してみてください:

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

し、その後でセグエのために(準備:送信者?)

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

p/s:この場合はディスパッチキューを使用する必要はありません

関連する問題