Я создаю уведомление для UIApplicationDidBecomeActiveNotification
, и по какой-то причине селектор вызывается дважды. Вот мой код в моем UIViewController
:NSNotificationCenter - Селектор наблюдателя, вызываемый дважды
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
NSNotificationCenter.defaultCenter().addObserver(self, selector: “selectorHere”, name: UIApplicationDidBecomeActiveNotification, object: nil)
}
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
Если я закомментируйте addObserver
линию в viewWillAppear
, уведомление не уволили вообще. Я бы предположил, что это означает, что указанная выше строка кода является единственным местом, где я добавляю наблюдателя для уведомления, но он все равно вызывается дважды.
Контроллер моего основного вида содержится в контроллере контейнера. Я думаю, что может быть, поэтому мой селектор вызывается дважды, но я не уверен.
Я пробовал все предложения по темам, связанным с этой проблемой, но не нашел решение, которое сработало для меня.
Любые дополнительные знания были бы очень признательны!
EDIT:
Я отправляю уведомление в applicationDidBecomeActive
методе AppDelegate в. Вот мой код для этого (Objective-C):
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
}
Этот код только стреляет один раз.
EDIT # 2:
Я использую viewWillAppear
и viewWillDisappear
методы, потому что я использую UINavigationController
. Я добавляю и удаляю наблюдателя в это уведомление на каждом контроллере представления в стеке навигации. Насколько я знаю, это не сработает, если я добавлю наблюдателя в viewDidLoad
. Если есть лучший способ сделать это, пожалуйста, дайте мне знать!
Попробуйте добавить контрольную точку, чтобы проверить, вызывается ли 'viewWillAppear' дважды. – dasdom
@dasdom Я пробовал это, и 'viewWillAppear' вызывается только один раз. – Alexander
Вы установили точку останова или зарегистрировали что-то в 'applicationDidBecomeActive' AppDelegate, чтобы проверить, вызвано ли это дважды? – dasdom