Swift 从完成处理程序中显示视图控制器

Swift show view controller from a completion handler

我有一个视图控制器,其中包含构建视图内容的函数 "CV"。函数 CV 有一个完成处理程序,它 returns 本身作为变量 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)
        }
    }
}

这个 returns 错误 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 {
        }
    }
}

虽然它行得通,但这违背了在构造完成时仅呈现 V 的目的。

我该怎么做?

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

[编辑]

你可以有一个名为 preraringViewController:UIViewController 的变量吗?在包含 S000 的 class 中,并在 .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
    }
}

}