2017-02-15 4 views
0

데이터를 tableview에 나열 할 수 있습니다. 행을 선택하고 눌려진 셀과 관련된 특정 데이터를 보여주는 다른 뷰 컨트롤러를 전달하려고 시도 할 수 없습니다. prepareforsegue 함수에서 데이터 "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

봅니다 보낸 매개 변수를

을 사용하려면이 코드

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) 

다음에 SEGUE에 대한 (준비를 : 보낸 사람 ?)

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

p/s :이 경우 디스패치 대기열을 사용할 필요가 없습니다.