2015-10-05 2 views
0

Я пытаюсь вызвать свою функцию из другого класса в мой новый класс. оригинальный код функции и класс отображаются ниже:Вызов функции из другого класса в Swift 2.1

class ViewController: UIViewController { 

func displayAlert(title: String, message: String) { 

     let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 

     alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in 

     //self.dismissViewControllerAnimated(true, completion: nil) 

     }))) 

     self.presentViewController(alert, animated: true, completion: nil) 

    } 
} 

Я пытаюсь вызвать функцию отображения оповещения в этом классе, как так:

class logInViewController: UIViewController{ 

    var loginError = ViewController().displayAlert("error", message: "What is wrong") 
     print(loginError) 

    or 


    ViewController().displayAlert("error", message: "What is wrong") 

} 

При выполнении кода он не отображает оповещения. Но если я тащу в функциональном блоке из исходного класса ViewController Затем я могу назвать

displayAlert("error", message: "Some Message") 

С не проблемой предупреждение приходит. Не уверен, что я делаю неправильно. Я читал другие статьи о переполнении стека, но я постоянно сталкиваюсь с той же проблемой, не обнаруживая предупреждения.

+0

Я удивлен, что вы не получили сообщение об ошибке «вид не в иерархии окон» в качестве подсказки. –

ответ

2

Таким образом, похоже, что здесь происходит несколько вещей.

  • Я собираюсь предположить, что logInViewController наследует от ViewController вместо UIViewController. Если это не так, то нужно.
  • ViewController().displayAlert(...) инициализирует экземпляр ViewController, а затем вызывает displayAlert(...) на этом экземпляре. Инициализированный экземпляр ViewController не находится в иерархии представлений, поэтому предупреждение не будет отображаться нигде. В любом случае вы не должны звонить ViewController().
  • Просто позвоните displayAlert(...) без ViewController() перед вызовом метода экземпляра текущего контроллера вида (self), что верно! Таким образом, вы ДОЛЖНЫ называть это так или иначе self.displayAlert(...) (предполагается, что logInViewController наследует от ViewController).
+0

Сладкий человек спасибо, я не могу поверить, что пропустил эту маленькую деталь. Но обычно это происходит, всегда помогает иметь другой набор глаз. еще раз спасибо – Rico

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