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
}
}
}
我有一个视图控制器,其中包含构建视图内容的函数 "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
}
}
}