объявить NotificationCenter.default.addObserver [swift] - PullRequest
0 голосов
/ 25 февраля 2020

Как добавить наблюдателя в Swift в центр уведомлений?

сделать это так:

override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(ReloadData), name: NSNotification.Name(rawValue: "ReloadData"), object: nil)

}
@objc func ReloadData(notification: NSNotification) {
        // func
        print ("FUNC TEST")
    }

Но каждый раз, когда контроллер закрывается / открывается (переключаться между вкладками панель вкладок), новый слушатель добавлен. И когда я звоню

print ("Call Notif")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ReloadData"), object: nil)

"fun c ReloadData" вызывается несколько раз. Консоль:

Call Notif
FUNC TEST
FUNC TEST

снова переключится между вкладками на панели вкладок.

Call Notif
FUNC TEST
FUNC TEST
FUNC TEST

Как я могу вас одолжить только один раз?

1 Ответ

0 голосов
/ 25 февраля 2020

Как ни крути, самое простое решение для этого - использовать жизненный цикл контроллера.

  1. Подписаться на уведомления для каждого внешнего вида или загрузки контроллера.
  2. Удалить уведомление для каждого deinit или исчезновения контроллера.

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ReloadData"), object: nil)
    
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        NotificationCenter.default.removeObserver(self)
    }
    

Если у вас есть базовый класс для каждого вашего контроллера, вы можете поставить removeObserver() в этом базовом классе.

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