在父 UIViewController 中收到多个 NSNotifications
Multiple NSNotifications received in parent UIViewController
我有一个父 UIViewController
BaseViewController
用于一些观点 :
class TestViewController: BaseViewController { ...
我想在 BaseViewController
中收到通知,所以我在 ViewWillAppear
:
中添加了一个观察者
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(BaseViewController.receivedNotification(_:)), name:"NotificationIdentifier", object: nil)
我无法删除 ViewWillDisappear
上的观察者,因为通知是从呈现的 UIViewController
发送的,可以在每个 UIViewController
上与父 BaseViewController
一起呈现,所以 BaseViewController
总是消失。
所以在浏览应用程序后,有不止一个观察者添加,我多次收到通知。
通知选择器只执行一次怎么办?或者如何在另一个 UIViewController
被推送时 .removeObserver
(但在出现时不删除)?
I can't remove an observer on ViewWillDisappear because notification is sent from presented UIViewController that can be presented on every UIViewController that parent is BaseViewController so BaseViewController is always disappeared.
你绝对可以。将在屏幕上显示的每个新 ViewController
都有自己的实例,因此有自己的 BaseViewController
副本。事实上,目前只能出现 BaseViewController
的一个副本(如果我们谈论全屏视图控制器)
你可以很好地使用:
NSNotificationCenter.defaultCenter().removeObserver(observer: <The class from which you want to remove>, name: "Name of notification which you want to remove", object: nil)
我有一个父 UIViewController
BaseViewController
用于一些观点 :
class TestViewController: BaseViewController { ...
我想在 BaseViewController
中收到通知,所以我在 ViewWillAppear
:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(BaseViewController.receivedNotification(_:)), name:"NotificationIdentifier", object: nil)
我无法删除 ViewWillDisappear
上的观察者,因为通知是从呈现的 UIViewController
发送的,可以在每个 UIViewController
上与父 BaseViewController
一起呈现,所以 BaseViewController
总是消失。
所以在浏览应用程序后,有不止一个观察者添加,我多次收到通知。
通知选择器只执行一次怎么办?或者如何在另一个 UIViewController
被推送时 .removeObserver
(但在出现时不删除)?
I can't remove an observer on ViewWillDisappear because notification is sent from presented UIViewController that can be presented on every UIViewController that parent is BaseViewController so BaseViewController is always disappeared.
你绝对可以。将在屏幕上显示的每个新 ViewController
都有自己的实例,因此有自己的 BaseViewController
副本。事实上,目前只能出现 BaseViewController
的一个副本(如果我们谈论全屏视图控制器)
你可以很好地使用:
NSNotificationCenter.defaultCenter().removeObserver(observer: <The class from which you want to remove>, name: "Name of notification which you want to remove", object: nil)