2017-03-19 5 views
0

뷰 컨트롤을 관리하는 뷰 컨트롤러에서 부울을 사용하여 다른 뷰로 부울 문을 전달하려고합니다. "uiviewcontroller에서 관련없는 형식으로 캐스트하면 항상 오류가 발생합니다."오류가 발생합니다. .Swift 3 - Segue/캐스트에서 uiviewcontroller와 무관 한 형식이 항상 실패합니다.

mainVC

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?{ 
     guard let viewControllerIndex = theViewControllers.index(of: viewController) else { 
      return nil 
     } 
     let nextIndex = viewControllerIndex + 1 

     if(viewControllerIndex == 0){ 
      let sessionTimerActive: Bool = false 
      performSegue(withIdentifier: "sessionActiveBool", sender: sessionTimerActive) 

     } 

secondVC 라인

if let sessionTrackerBoolClone = segue.destination as? Bool{ 

에서 그러나

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let sessionTrackerBoolClone = segue.destination as? Bool{ 
    sesssionTrackerActive = sessionTrackerBoolClone 
    } 
} 

나는 오류를 얻고있다.

답변

1

당신은 대상 UIViewController의 유형이 아니라 segue.destination 때문에 Boolean 값을 얻을 수 sender 캐스팅 입력해야합니다.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let sessionTrackerBoolClone = sender as? Bool{ 
     sesssionTrackerActive = sessionTrackerBoolClone 
    } 
} 

당신이 다음 다음 컨트롤러에이 BOOL 값을 전달 캐스트하여 ViewControllerdestination을 입력하고 속성을 설정합니다. 코드 segue.destination에서

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let vc = segue.destination as! ViewController //Your ViewController class 
    if let sessionTrackerBoolClone = sender as? Bool{ 
     vc.sesssionTrackerActive = sessionTrackerBoolClone 
    } 
} 
+0

그것은 당신을 위해 일하는가? –

0

UIViewController 될 것입니다. 그럼 왜 그걸에 던지고 있니? 그것은 당신에게 오류를주는 캐스트입니다. 거기에 잘못된 값을보고있을 수도 있습니다. 고쳐야 당신은 괜찮을거야 :)

관련 문제