Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Ios 如何将数据传递到viewcontroller并在将其推送到导航堆栈之前加载它?_Ios_Swift_Uiviewcontroller_Uinavigationcontroller_Segue - Fatal编程技术网

Ios 如何将数据传递到viewcontroller并在将其推送到导航堆栈之前加载它?

Ios 如何将数据传递到viewcontroller并在将其推送到导航堆栈之前加载它?,ios,swift,uiviewcontroller,uinavigationcontroller,segue,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,Segue,我有一个带有集合视图的视图控制器,当我单击一个单元格时,我将一个变量传递给另一个视图控制器,然后将其推送到导航堆栈上 func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { self.performSegueWithIdentifier("nextVC", sender: self.userArray[indexPath.row])

我有一个带有集合视图的视图控制器,当我单击一个单元格时,我将一个变量传递给另一个视图控制器,然后将其推送到导航堆栈上

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
     self.performSegueWithIdentifier("nextVC", sender: self.userArray[indexPath.row])
}
这是我发送变量的方式:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
     super.prepareForSegue(segue, sender: sender)
     let nextVC = segue.destinationViewController as! NextVC
     if let senderId = sender!.objectForKey("uId") {
          nextVC.userId = senderId as! String
     }
}

这个下一个视图控制器(nextVC)上有很多东西。我已经尽了我所能来优化它,但它仍然需要一些时间来加载所有的东西。有没有一种方法可以让我为segue做准备,传递变量,让下一个vc做它该做的事情,然后当它完成加载后,实际上就开始了?(或展示)?我看到了其他一些关于预加载视图控制器的问题,但没有一个涉及到传递变量。这个变量非常重要,因为nextVC中的所有内容都必须知道这个变量(基于单元格接触),否则它将无法加载。我希望我解释得足够清楚,谢谢您的时间。

如果您访问
destinationViewController
view
属性,它将触发
视图的加载。因为您并不真正需要
视图
,所以只需将其分配给
,即可使编译器满意

试试这个:

 if let senderId = sender!.objectForKey("uId") {
      nextVC.userId = senderId as! String
      _ = nextVC.view
 }

这将触发
viewDidLoad
在segue发生之前运行。确保设置下一个TVC的代码在
viewDidLoad
中,您应该可以开始了。

是的,但它不会马上继续吗?没有给它加载时间?除非你在后台线程中加载内容,否则我认为视图将在
\uu=nextVC.view
完成后加载,这是在segue发生之前。你试过了吗?是的,没什么区别耶,
viewdide
在赛后才会出现。你能把代码移到
viewDidLoad
吗?很高兴我能帮忙!