NotificationCenter swift3 Не могу просмотреть сообщение

У меня есть 3 уведомления:

NotificationCenter.default.post(name:NSNotification.Name("Notification1"), object: nil)
NotificationCenter.default.post(name:NSNotification.Name("Notification2"), object: nil)
NotificationCenter.default.post(name:NSNotification.Name("Notification3"), object: nil)

И у меня есть для каждого поста один другой наблюдатель в контроллере представления.

Первый:NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification1"), object: nil, queue: nil, using: updateUx)

Второй:NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification2"), object: nil, queue: nil, using: updateUx)

Третий:NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification3"), object: nil, queue: nil, using: updateUx)

Функция updateUx содержит только распечатку уведомления.

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


person Badr Filali    schedule 24.02.2017    source источник
comment
Ваше первое уведомление не может быть получено. Вы не наблюдаете Notification1, но наблюдаете DashboardNotification   -  person viral    schedule 24.02.2017
comment
Вы уверены, что имена для добавления наблюдателя и пост-наблюдателя одинаковы?   -  person Priyal    schedule 24.02.2017
comment
Попробуйте изменить NotificationCenter.default.addObserver, как показано ниже. Он должен работать. Я попробовал, и это так.   -  person viral    schedule 24.02.2017
comment
Извините за то, что разместил это на github, я меняю имя, редактирую свой вопрос.   -  person Badr Filali    schedule 24.02.2017
comment
Я не сталкиваюсь с какими-либо проблемами при использовании этого кода. Вы уверены, что ваши наблюдатели добавлены, а затем опубликовано уведомление?   -  person Priyal    schedule 24.02.2017
comment
Проверьте обновленный ответ. Если это не сработает, я не знаю, что будет. :)   -  person viral    schedule 24.02.2017
comment
Где вы удаляете наблюдателя? Если вы удалите наблюдателя в viewWillDisappear, контроллер, который в данный момент не находится на экране, не получит никакого уведомления.   -  person Bohdan Savych    schedule 24.02.2017


Ответы (1)


Добавьте своих наблюдателей следующим образом:

NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification1"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification2"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification3"), object: nil)

И вы можете идти.


РЕДАКТИРОВАТЬ: Полный исходный код (этот проект имеет UIButton для просмотра, а @IBAction подключен к нему в раскадровке. При нажатии этой кнопки будут опубликованы все 3 уведомления. Предполагается, что журнал будет распечатан трижды в консоли)

class ViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification1"), object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification2"), object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification3"), object: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        NotificationCenter.default.removeObserver(self)
    }

    @IBAction func abc (_ sender: UIButton) {
        NotificationCenter.default.post(name:NSNotification.Name("Notification1"), object: nil)
        NotificationCenter.default.post(name:NSNotification.Name("Notification2"), object: nil)
        NotificationCenter.default.post(name:NSNotification.Name("Notification3"), object: nil)
    }

    func updateUx(){
        print("received...")
    }
}
person viral    schedule 24.02.2017