2015-05-12 3 views
1

В AppDelagate я называю следующее в методеНевозможно вызвать метод ViewController из AppDelegate

func example() { 
    ViewController().test() 
} 

и В моей ViewController метода

func test() { 
    testView.userInteractionEnabled = true 
    buttonTapped(UIButton()) 
    restartTimer() 
} 

, но он выходит из строя, когда я называю метод, из-за ошибки nil с testView. testView - это вид в ViewController, а не в AppDelegate, но я не знаю, как сделать так, чтобы этот метод выполнялся, как это было бы, если бы я назвал его в ViewController.

+0

создание экземпляра ViewController таким образом, который вы сделали, не создает его из раскадровки. Я предполагаю, что ваш testView - это IBOutlet? – ad121

+0

testView - это IBOutlet – Sason

+0

, вы импортировали ViewController в appDelegate? –

ответ

1

IBOutlet - nil до тех пор, пока контроллер режима не вызовет viewDidLoad. viewDidLoad не произошло, так как вы пытались создать экземпляр класса напрямую по вызову ViewController().

Таким образом, testView - это нуль, как и ожидалось. Ваш AppDelegate не должен нести ответственность за логику ViewController.

+0

Он по-прежнему падает после завершения метода viewDidLoad – Sason

+0

Он не выполняет метод 'viewDidLoad'. –

0

Как вы уже знаете, ваша авария происходит из-за того, что вы получаете доступ к IBOutlet, прежде чем он получит возможность инициализации. Таким образом, я предполагаю, что testView объявлен вроде этого:

@IBOutlet weak var testView: UIView! 

Раствор А

Вы можете повернуть его по желанию вместо того, чтобы избежать этой аварии:

@IBOutlet weak var testView: UIView? 

И изменить синтаксиса в вашем VC:

testView?.userInteractionEnabled = true 

Раствор B

Если вам действительно нужно, чтобы включить взаимодействие пользователя от в этой точке, вы можете заставить вид на нагрузке:

let myVc = ViewController() 
_ = myVc.view // this will force the myVc.view to be loaded 
myVc.test() 

Таким образом, ваши IBOutlet s будет иметь возможность инициализировать перед тем вы запускаете метод test().

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