2017-05-08 3 views
0

여기 내 코드입니다.데이터가 적절한 시간에 전송되지 않습니다. 내 준비를위한 준비 기능

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

    // Get Cell Label 
    let indexPath = tableView.indexPathForSelectedRow; 
    let currentCell = tableView.cellForRow(at: indexPath!) as! monthTableViewCell!; 

    valueToPass = (currentCell?.monthOutlet.text)! 
    print(valueToPass) 



} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "toMonthVC") { 

     // initialize new view controller and cast it as your view controller 
     let viewController = segue.destination as! monthCellViewController 
     // your new view controller should have property that will store passed value 
     viewController.dataFromHoursVC = valueToPass 
    } 
} 

기본적으로 하나의 VC에서 다른 VC로 값을 전달하려고합니다. didSelectRow는 예상대로 완벽하게 작동합니다. 그러나 준비 기능이 늦게 실행 중입니다. 예를 들어, 코드가 처음 실행될 때 두 번째 vc는 전달 된 값을 nil로 간주합니다. 하지만 다시 돌아가서 다시 해보면 전달 된 가치가 나온다. 그러나 그 가치는 이전에 행해진 가치이다. 그래서 단순히 준비 기능이 뒤에 있거나 늦게 호출되는 것처럼 작동합니다.

+0

'valueToPass' 선언을 보여 주시겠습니까? –

+0

이것은 뒤로 호출 버튼을 누를 때마다 뷰가 삭제되고 두 번째로 다시 생성되므로 prepareforswgue가 늦게 호출되는 것과는 아무런 관련이 없습니다. 실제로 일어나는 일을 알기 위해 더 많은 것을 보여주세요 –

+0

정확히'monthCellViewController'에서'dataFromHoursVC' 변수에 접근하고 있습니까? – Nef10

답변

0

어떻게 세그를 설정 했습니까? segue가 수행되기 전에 값이 설정되지 않은 것 같습니다. 당신이 식별 이름은 다음과 같이 코드를 설정하여 SEGUE을 제공 한 후

enter image description here

:

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

    // Get Cell Label 
    let indexPath = tableView.indexPathForSelectedRow; 
    let currentCell = tableView.cellForRow(at: indexPath!) as! monthTableViewCell!; 

    valueToPass = (currentCell?.monthOutlet.text)! 
    print(valueToPass) 

    // invoke the segue manually after value is set 
    self.performSegue(withIdentifier: "SEGUEID", sender: self) 
} 

빠른 경고

당신을

이런 식으로 일을보십시오 정말 강제로 unwraps optionalVar! 및 forc를 사용하여 신중해야합니다 전자 다운 캐스트 thing = otherThing as! Type. 항상 if-let 및 guard-let 문 또는 실패 할 수있는 다운 캐스트를 사용하는 것이 훨씬 더 좋습니다 as?. 이것들을 사용하면 무언가 가치의 버그를 찾기가 어렵습니다.

+0

이 대답으로 문제가 해결되었습니다. 내가 한 일은 내가 위에서 보여준 방식보다는 셀과 두 번째보기 컨트롤러 사이에 단절을 만들었다는 것입니다. 그래서 나는 돌아가서 당신이 한 일을했고 모든 것이 완벽하게 작동합니다. 엄청 고마워! – AdrianGutierrez

+0

괜찮습니다! 다행히 도울 수있어. –

0

이 경우 인터페이스 작성기에서 컨트롤러보기를 위해 테이블 ​​뷰의 데이터 소스를 설정하거나 위임 한 경우 발생할 수 있습니다. 나머지 코드에 따라 초기화하는 동안 (즉, 컨트롤러가 prepareForSegue 함수에 전달되기 전에) View Controller의 초기화가 tableview의 delegate 또는 dataSource에 액세스해야 할 수 있습니다. IB에서 설정되면 대리자 (또는 dataSource)가 함수를 호출 할 수있게합니다.

관련 문제