Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TabbarController子控制器始终返回nil-Swift 4_Swift_Uiviewcontroller_Uitabbarcontroller_Uitabbar - Fatal编程技术网

TabbarController子控制器始终返回nil-Swift 4

TabbarController子控制器始终返回nil-Swift 4,swift,uiviewcontroller,uitabbarcontroller,uitabbar,Swift,Uiviewcontroller,Uitabbarcontroller,Uitabbar,我试图从子控制器访问对象,但它总是返回nil。请检查下面的代码 let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main) let vc: UITabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController vc.selectedIndex = 2

我试图从子控制器访问对象,但它总是返回nil。请检查下面的代码

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let vc: UITabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
vc.selectedIndex = 2
let vc1 = vc.viewControllers?[2] as? FormViewController //this line returns nil
vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
vc1?.formViewDelegate = self
self.present(vc, animated: true, completion: nil)
请放点光。

你可以试试

let nav = vc.viewControllers?[2] as? UINavigationController
let vc1 = nav?.topViewController as? FormViewController
注意:此处不应访问任何UI元素

vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
因为它会使应用程序崩溃,你可以试试

let nav = vc.viewControllers?[2] as? UINavigationController
let vc1 = nav?.topViewController as? FormViewController
注意:此处不应访问任何UI元素

vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))

由于它会根据您的评论使应用程序崩溃,第三个选项卡实际上是一个
UINavigationController
,它的
FormViewController
作为
rootViewController

将代码更新为:

if let nc = vc.viewControllers?[2] as? UINavigationController, let vc1 = nc.topViewController as? FormViewController {
    vc1.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
    vc1.formViewDelegate = self
}

根据您的评论,第三个选项卡实际上是一个
UINavigationController
,它将
FormViewController
作为它的
rootViewController

将代码更新为:

if let nc = vc.viewControllers?[2] as? UINavigationController, let vc1 = nc.topViewController as? FormViewController {
    vc1.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
    vc1.formViewDelegate = self
}

它可能为零,因为第三个视图控制器不是
FormViewController
。也许它是一个导航控制器。我确信第三视图控制器是formviewcontroller,它嵌入在导航控制器中。这就是我的全部观点
vc.ViewController?[2]
不是一个
FormViewController
,它是一个
UINavigationController
。这就是为什么会得到
nil
。它可能是nil,因为第三个视图控制器不是
FormViewController
。也许它是一个导航控制器。我确信第三视图控制器是formviewcontroller,它嵌入在导航控制器中。这就是我的全部观点
vc.ViewController?[2]
不是一个
FormViewController
,它是一个
UINavigationController
。这就是为什么会得到
nil