Swift显示来自完成处理程序的视图控制器

时间:2016-01-17 17:29:08

标签: xcode swift presentviewcontroller completionhandler

我有一个带有功能的视图控制器" CV"在它构建视图内容。函数CV有一个完成处理程序,它将itselve作为变量返回V.我现在要做的是当我创建一个新视图的实例时,显示V就像这样:

func S0000 (VD0000: O0001) {
    (self.storyboard!.instantiateViewControllerWithIdentifier("V0005") as! V0005).Cv (VD0000){ (V) -> Void in
        NSOperationQueue.mainQueue().addOperationWithBlock {
            self.presentViewController(V, animated: true, completion: nil)
        }
    }
}

这会返回V == nil的错误,我不明白为什么。我发现如果我这样写:

func S0000 (VD0000: O0001) {
    let V = self.storyboard!.instantiateViewControllerWithIdentifier("V0005") as! V0005
    self.showViewController(V, sender: self)
    V.Cv (VD0000){ (V) -> Void in
        NSOperationQueue.mainQueue().addOperationWithBlock {
        }
    }
}

比起它的作用,但是当它的构造完成时,这违背了onley目前V的目的。

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

在第一个函数中,一旦函数完成,视图控制器的实例就会超出范围,因此在调用完成处理程序时它不再存在。

[编辑]

你可以有一个名为preraringViewController的变量:UIViewController?在包含S000的类中,当.cv正在准备时,使用它来保持对视图控制器的引用。

var preraringViewController:UIViewController? = nil
func S0000 (VD0000: O0001) 
{
   preraringViewController = self.storyboard!.instantiateViewControllerWithIdentifier("V0005")
   (preraringViewController as! V0005).Cv (VD0000)
    { (V) -> Void in
       NSOperationQueue.mainQueue().addOperationWithBlock {
        self.presentViewController(V, animated: true, completion: nil)
       preraringViewController  = nil
    }
}

}