ViewController и Центр уведомлений (представление, а не шаблон проектирования:p)

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

Как и во многих случаях и ситуациях, кажется, что viewWillDisappear всегда называется и willWillAppear больше не вызывается (с iOS 4.0 я бы сказал?)

Вот в чем дело: когда это представление - выбранный виртуальный канал моего TabBar, и пользователь показывает центр уведомлений, потрепав его вниз, viewWillDisappear всегда вызывается и останавливает прямую трансляцию. Но когда это представление отклонено, я никогда не получаю обратный вызов, что контроллер снова активен.

Какие-нибудь советы? Спасибо;)

2 ответа

Решение

Начиная с iOS 5, вызовы viewWillAppear и viewWillDisappear изменились. Таким образом, независимо от того, что должно произойти, если вы можете полагаться на то, что это происходит в iOS4, это не должно работать по-другому под iOS5. Это довольно странно для меня, это стало методом проб и ошибок!

-viewWillAppear гарантированно вызывается только в тех местах, где -viewWillDisappear также был вызван ранее - но для большинства модальных представлений / окон это, похоже, не так! И это может быть проблема с центром уведомлений, это может рассматриваться как модальное окно или около того!

Так что, к сожалению, у меня нет хороших советов для вас!

Вы можете проверить, вызывается ли applicationDidBecomeActive, когда центр уведомлений закрыт, и каким-то образом подключить свою логику через делегат приложения.

- (void)applicationDidBecomeActive:(UIApplication *)application

Из Руководства по программированию приложения для iOS:

В iOS 5 уведомления, отображающие баннер, не деактивируют ваше приложение, как уведомления, основанные на предупреждениях. Вместо этого баннер располагается вдоль верхнего края окна вашего приложения, и ваше приложение продолжает получать сенсорные события, как и раньше. Однако если пользователь тянет вниз баннер, чтобы открыть центр уведомлений, ваше приложение переходит в неактивное состояние так же, как если бы произошло прерывание на основе предупреждений. Ваше приложение остается в неактивном состоянии до тех пор, пока пользователь не закроет центр уведомлений или не запустит другое приложение. На этом этапе ваше приложение переходит в соответствующее активное или фоновое состояние. Пользователь может использовать приложение "Настройки", чтобы настроить, какие уведомления отображают баннер, а какие - предупреждение.

Я только что нашел обходной путь с помощью метода AppDelegate ApplicationDidBecomeActive. После этого я вручную позвонил [selectedViewController viewWillAppear:YES];:)

Другие вопросы по тегам