0

我想允许用户在他的电子邮件中打开我的应用程序中的图像。我已经在app delegate中设置了如下功能来导航到我的settingsTableViewController。 settingsTableViewController是一个navigationController,它是一个tabBarViewController。打开ViewController(这是一个tabBarController内的navigationController)并运行功能

func application(app: UIApplication, openURL url: NSURL, 
    options: [String : AnyObject]) -> Bool { 


    self.window!.visibleViewController 
    goToSecond() 


    return true 
} 

func goToSecond() { 
     let tabBarController: UITabBarController = (self.window?.rootViewController as? UITabBarController)! 
     tabBarController.selectedIndex = 3 

} 

我用来做上述工作扩展为:

public extension UIWindow { 
public var visibleViewController: UIViewController? { 
    return UIWindow.getVisibleViewControllerFrom(self.rootViewController) 
} 

public static func getVisibleViewControllerFrom(vc: UIViewController?) -> UIViewController? { 
    if let nc = vc as? UINavigationController { 
     return UIWindow.getVisibleViewControllerFrom(nc.visibleViewController) 
    } else if let tc = vc as? UITabBarController { 
     return UIWindow.getVisibleViewControllerFrom(tc.selectedViewController) 
    } else { 
     if let pvc = vc?.presentedViewController { 
      return UIWindow.getVisibleViewControllerFrom(pvc) 
     } else { 
      return vc 
     } 
    } 
} 
} 

上述工作,直到我加入我的代码的URL传递给settingsTableViewController如下:

let vc = self.window?.rootViewController as! SettingsTableViewController 
    vc.displayImage(url) 

我收到以下错误:

Could not cast value of type '.TabBarController' (0x100161c00) to '.SettingsTableViewController' 

有什么建议吗?

回答

0

你的错误告诉你到底是什么问题。 RVC实际上是TabBarController,而不是您的SettingsTableViewController。这意味着您需要访问TabBarController的阵列,直到您到达SettingsTableViewController

相关问题