Метод выбора наблюдателя Центра уведомлений не вызывается - PullRequest
0 голосов
/ 14 декабря 2018

Я добавляю наблюдателя на контроллер представления A, а контроллер представления B представляет на A.

При отклонении контроллера B я опубликовал уведомление, но он не вызывает метод выбора, добавленный в A.

Также сначала регистрируется уведомление и вызывается метод post.Я уже проверил это.

Вот пример кода:

NotificationCenter.default.addObserver(self, selector: #selector(closButtonPressed(notification:)) ,name: Notification.Name("CloseButtonPressed"), object: nil)


@objc func closButtonPressed(notification: Notification){
}

NotificationCenter.default.post(name: Notification.Name("CloseButtonPressed"), object: self)

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Убедитесь, что вы правильно внедрили уведомления.Я рекомендую вам создать расширение для имени уведомления и сделать его статичным.

extension Notification.Name {
    static let didTapCloseButton = Notification.Name("CloseButtonPressed")
}

NotificationCenter.default.addObserver(self, selector: #selector(didTapCloseButton(_:)), name: .didTapCloseButton, object: nil)

@objc func didTapCloseButton(_ sender: Notification?) {

}

NotificationCenter.default.post(name: .didTapCloseButton, object: nil)
0 голосов
/ 14 декабря 2018

Я не уверен, что не так с вашим проектом.Чтобы решить вашу проблему, я создаю тестовый проект и пишу некоторый код, подобный этому:

    //ControllerA.swift
    override func viewDidLoad() {
    NotificationCenter.default.addObserver(self, selector: #selector(getNotification(notification:)), name:      NSNotification.Name("CloseButtonPressed"), object: nil)
    }

    getNotification(notification: Notification) {
    print(notification)
    }

    @objc func buttonAClick() {
        navigationController?.present(ViewControllerB(), animated: true, completion: {
        })
    }

    //ViewControllerB.swift
    @objc func buttonClick() {
            NotificationCenter.default.post(name: Notification.Name("CloseButtonPressed"), object: self)
            self.dismiss(animated: true) {
            }
        }

Как вы сказали, я добавляю уведомление в ControllerA и представляю ControllerB, когда ControllerB закрывается, публикует уведомление и отклоняет консоль, консольможно распечатать объект уведомления , так что, я могу что-то пропустить?

0 голосов
/ 14 декабря 2018

Убедитесь, что отправили уведомление в обработчик завершения

self?.dismiss(animated: true, completion: {
NotificationCenter.default.post(name: Notification.Name("CloseButtonPressed"), 
object: self)

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...