Метод селектора NotificationCenter не вызывается в Swift - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь отправить данные первого текстового поля viewcontroller во вторую метку viewcontroller.

В первом контроллере кнопка действия Inside send добавляет метод отправки уведомления

 @IBAction func sendtBtn(_ sender: Any) {
    let secVc = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    self.navigationController?.pushViewController(secVc, animated: true)

     NotificationCenter.default.post(name: Notification.Name( "notificationName"), object: nil, userInfo: ["text": firstTextField.text])
   }

И второй метод addobserver viewcontroller внутриview didload

   NotificationCenter.default.addObserver(self, selector: #selector(self.showMsg(_:)), name: Notification.Name( "notificationName"), object: nil)

Функция селектора:

func showMsg(_ notification: Notification){
    print("helloooo")
    var vcData = notification.userInfo?["text"]
    firstLabel.text = vcData as! String
}

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

1 Ответ

0 голосов
/ 28 сентября 2018

У вас до есть ссылка на второй контроллер вида. Нет никаких оснований использовать Notification.Не используйте уведомления, если имеется только один получатель и объекты связаны между собой.

Код не работает, поскольку представление еще не загружено при отправке уведомления.

Забудьтеуведомление.Вместо этого создайте свойство во втором контроллере представления, присвойте значение в sendtBtn и покажите сообщение в viewDidLoad

@IBAction func sendtBtn(_ sender: Any) {
    let secVc = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    secVc.message = firstTextField.text
    self.navigationController?.pushViewController(secVc, animated: true)

}

Контроллер второго представления

var message = ""

func viewDidLoad() {
    super.viewDidLoad()
    firstLabel.text = message
}
...