Метод наблюдателя вызывается несколько раз, даже если я регистрируюсь в viewWillAppear и отменяю регистрацию в viewWillDissapear - PullRequest
0 голосов
/ 12 октября 2018

Метод наблюдателя вызывается несколько раз, даже если я зарегистрирован в viewWillAppear и незарегистрирован в viewWillDissapear.

override func viewWillAppear(_ animated: Bool) {
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(handlePushNotification(notification:)),
                                           name: NSNotification.Name(rawValue: "abc"),
                                           object: nil)

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

1 Ответ

0 голосов
/ 12 октября 2018

Это хороший вариант использования для переменной-члена с наблюдателем свойства: просто сделайте наблюдателя уведомлений членом вашего подкласса View Controller и выполните очистку наблюдателя уведомлений внутри блока willSet:

class MyViewController: UIViewController {

    var notificationObserver: Any? {
        willSet {
            // if notificationObserver is not null, unregister it
            if let observer = notificationObserver {
                NotificationCenter.default.removeObserver(observer)
            }
        }
    }

    override func viewWillAppear(_ animated: Bool) {
        notificationObserver = NotificationCenter.default.addObserver(self,
                                       selector: #selector(handlePushNotification(notification:)),
                                       name: NSNotification.Name(rawValue: "abc"),
                                       object: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        notificationObserver = nil
    }

}

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

Если вы все еще получаете несколько обратных вызовов, это будет означать, что уведомление отправляется большечем один раз.

...