我有一个带有功能的视图控制器" 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的目的。
我怎么能这样做?
答案 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
}
}
}