2017-12-19 26 views
4

dropDown pod와 연결된 기본값이 nil 인 메인 viewController에 하나의 버튼이 있습니다. 동일한 viewController에는 컨테이너보기도 있습니다.동일한 값을 다른 값으로 컨테이너 뷰에 전달

처음로드하는 동안 공유 환경 설정에서 변수의 기본값을 가져 와서 해당 값을 performSegue까지 컨테이너보기로 전달합니다.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if(segue.identifier == "dataToContainerView"){ 
    DispatchQueue.main.async { 

    var secondVC = segue.destination as! secondViewController //container viewController 
     secondVC.variable = self.variable 
    } 
    } 
} 

은 이제 사용자에 의해 dropdown 버튼을 선택하여 다시 동일한 변수 값을 전달해야한다.

dropDown.selectionAction = { [unowned self] (index, item) in 
     self.button.setTitle(item, for: UIControlState()) 
     self.variable = item 
     print(item) 
     self.performSegue(withIdentifier: "dataToContainerView", sender: nil) 
    //performing segue to resend the new value of the variable. 
    } 

위의 코드는 print(item)까지 올바르게 수행됩니다. 그러나 performSegue에서 다음 오류가 발생합니다.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There are unexpected subviews in the container view. Perhaps the embed segue has already fired once or a subview was added programmatically? 

가 어떻게 dropDown 포드의 도움으로 첫 번째 값을 오버라이드 (override) 컨테이너보기 두 번째로 값을 전달해야 ?

업데이트 : - 변수 viewController의 json 파서에 전달할 수 있도록 변수 값이 필요합니다. 그리고 container viewController의 코드가 다시 실행됩니다.

+0

당신이 대표를 통해 전달할 수 있습니다. –

+0

오류가 말한 것처럼 그렇게 할 수 없습니다. 해결책은 사용자 지정 클로저를 설정하거나 대리자를 사용하는 것입니다. – Larme

+1

@DharmeshKheni 해결책을 찾기 위해 나를 안내하거나 코드를 알려주세요. – Error

답변

2

임베디드 컨트롤러에 대한 참조를 저장해야 나중에 다시 업데이트 할 수 있습니다. 첫 번째 SEGUE에서이 작업을 수행 :

// Declare a local variable in your parent container: 
var secondVC: secondViewController! 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if(segue.identifier == "dataToContainerView"){ 
     DispatchQueue.main.async { 
      self.secondVC = segue.destination as! secondViewController 
      //container viewController 
      self.secondVC.variable = self.variable 
     } 
    } 
} 

을 그리고 나중에 변수를 업데이트해야 그냥 직접 참조 할 수 있습니다 때

self.secondVC.variable = self.variable 
self.secondVC.viewDidLoad() 
+0

이것을 수행했지만 컨테이너보기 두 번째 값으로 리프레쉬되지 않습니다 (Segue를 다시 통과하는 이유). 사실 컨테이너 뷰의 Json 파서에서이 값을 전달합니다. 컨테이너 viewController의 코드를 실행하지 않습니다. 업데이트 된 질문을 확인하십시오. – Error

+0

값을 새로 고치려면 두 번째보기에서 호출하는 함수가 있습니까? 코드를 업데이트하여 JSON 값을 처리하는 secondVC의 코드를 표시하십시오. 변수를 변경할 때마다 해당 함수를 다시 호출해야합니다. – davidethell

+0

예, 컨테이너 ViewController에는 기능이 있습니다. 동일한 viewController에서 3 개, 주 viewController에서 1 개로 4 개의 변수가 필요합니다. 나는 segue를 수행 할 때 처음으로 실행됩니다. 두 번째로 값을 할당 한 후 해당 기능을 다시 수행하는 방법을 알려 주시면 문제를 해결할 수 있습니다. – Error