Swift show view controller из обработчика завершения
У меня есть контроллер представления с функцией "CV", которая создает содержимое представлений. функция CV имеет обработчик завершения, который возвращает себя в качестве переменной 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 {
}
}
}
чем это работает, но это побеждает цель, которая состоит в том, чтобы только представить V, когда его строительство завершено.
Как я мог это сделать?
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
}
}
}