2016-09-06 2 views
1

Я создаю уведомление о viewdidload UIKeyboardWillShowNotification и удаление его на viewwilldisappear.IOS - UIKeyboardWillShowNotification вызывается несколько раз, когда блокировка экрана

Когда клавиатура появляется на экране, и ее уведомление вызывается один раз, как ожидалось, я заблокировал экран. Уведомление называется раз и создает нежелательную функциональность.

Почему вызывается уведомление? как я могу предотвратить этот сценарий?

Я добавляю Observer для уведомления в viewdidload таким образом

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

EDIT: Те же результаты, если я отправить приложение в фоновом режиме вместо экрана блокировки.

ответ

0

В вашем случае Уведомление вызывает несколько раз, что показывает, что addObserver вызывает несколько раз, или вы не удаляете наблюдателя после его использования.

Просто следуйте этой вещи:

  • Как вы упомянули вы удаляете наблюдателя в viewwilldisappear метода. Поэтому попробуйте отладить &, если он вызван. Если этот метод не вызван, попробуйте удалить его в методе viewDidUnload.
  • Если вы все еще не можете удалить наблюдателя, а просто просто удалите код наблюдателя перед строкой добавления наблюдателя. Вот и все. Это будет работать точно.

Примечание:

  • Решение я предложил вам уже пытались & тестирование & прекрасно работает на моем конце.

Надеюсь, это поможет вам.

+0

Несомненно, то, что вы сказали, будет работать. Но дело в том, что я добавляю Observer для клавиатуры. Уведомление запускается один раз в viewdidload и никогда не инициализируется снова. viewwilldisappear не получает вызов при отправке приложения в фоновый режим, ни представление не загружалось. Это должно быть проблемой в Apple. Я буду отмечать ваш ответ правильно, если я не получу больше ответов по точной проблеме. – Hassy

+0

@ghazi_jaffary Я предлагаю вам отлаживать и видеть, какие вызовы метода делегата viewcontroller. Например, если viewDidUnload может вызывать в вашем случае – Mayur

+0

@ghazi_jaffary, вы представляете viewcontroller, где вы добавляетеObserver? –

2

, что то же самое было со мной случилось

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:nil]; 

я представлял контроллер вида на кнопку мыши. каждый раз, когда я представляю Viewcontroller viewdidload, вы вызываете его, добавляете addObserver. поэтому метод получает многократное время.

+0

В моем случае он вызывается только один раз не в несколько раз – Hassy

+0

@ Hassy, ​​когда приложение переходит в фоновый рисунок UIKeyboardWillShowNotification fire многократно. это может быть проблема с os. –

+0

Да, скорее всего, это проблема ОС. – Hassy

Смежные вопросы