2016-01-17 5 views
1

У меня есть контроллер вида с функцией «CV» в нем, которая конструирует содержимое просмотров. функция CV имеет обработчик завершения, который возвращает itselve в качестве переменной V. То, что я бы сейчас хочу сделать, когда я создаю новый экземпляр этой точки зрения, которая показывает V следующим образом:Swift show view controller от обработчика завершения

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, когда его завершения О построении.

Как я могу это сделать?

+3

Я не знаю, с чего начать: переменные и функции должны начинаться с прописной буквы '' vd0000, '' cv' и V' вместо '' VD0000', V' и 'Cv'. Имена в целом должны быть значимыми, не пронумерованными - не 'VD0000',' O0001', 'S0000',' V0005' - I 10000% гарантируют вам, что никто, кроме вашего, не сможет понять ваш код. – luk2302

+0

Да, я знаю, я уладил это себе, поэтому я начал ошибаться и не мог справиться с этим, но плохо пытался. – Luis

+0

Перепишите все. Вы не сможете справиться с этим беспорядком. – dasdom

ответ

1

В первой функции ваш экземпляр контроллера вида выходит из области действия сразу после завершения функции, поэтому ее больше нет, когда вызывается обработчик завершения.

[EDIT]

Вы могли бы иметь переменную с именем 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 
    } 
} 

}

+0

Как я мог предотвратить это? – Luis

+0

Вам нужно будет сохранить переменную экземпляра в области, которая шире функции S000. Я отредактировал свой ответ, чтобы привести пример. –

Смежные вопросы