2017-03-19 32 views
0

我想从我的viewcontroller管理viewcontroller到另一个使用segue的布尔语句,我得到“从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

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

if let sessionTrackerBoolClone = segue.destination as? Bool{ 

但是我得到的错误。

回答

1

你需要输入sender才能得到你的Boolean的值不是segue.destination,因为目的地类型是UIViewController

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

如果你想这个布尔值传递给你的下一个控制器,然后键入铸destinationViewController并设置其属性。

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

在您的代码segue.destination将是一个UIViewController。那么你为什么要把它转换成Bool?这是演员给你一个错误。你可能会在那里看到错误的值。解决这个问题,你应该没问题:)

相关问题