У меня есть View Controller, в котором мое значение равно 0 (метка), и когда я открываю этот View Controller из другого, ViewController
я установил viewDidAppear
значение 20 для метки. Он отлично работает , но когда я закрываю приложение и чем я снова открыть мое приложение , но значение не изменится , потому что viewDidLoad
, viewDidAppear
и viewWillAppear
ничего дозвонился. Как я могу позвонить, когда я открою свое приложение. Должен ли я сделать что-нибудь из applicationDidBecomeActive
?
175
Ответы:
Заинтересовавшись точной последовательностью событий, я оснастил приложение следующим образом: (@Zohaib, вы можете использовать приведенный ниже код NSNotificationCenter, чтобы ответить на ваш вопрос).
При запуске вывод выглядит так:
Введите фон, затем снова введите передний план:
источник
Использование Objective-C
Вы должны зарегистрировать
UIApplicationWillEnterForegroundNotification
в вашемViewController
«sviewDidLoad
метод и всякий раз , когда приложение возвращается из фона , вы можете делать все , что вы хотите сделать в методе зарегистрированного уведомления.ViewController
«S viewWillAppear или viewDidAppear не будет вызываться , когда приложение возвращается из фона на передний план.Не забудьте отменить регистрацию уведомления, на которое вы зарегистрированы.
Примечание При регистрации
viewController
дляUIApplicationDidBecomeActiveNotification
то ваш метод будет вызываться каждый раз , когда ваше приложение становится активным, не рекомендуется регистрироватьсяviewController
для этого уведомления.Использование Swift
Для добавления наблюдателя вы можете использовать следующий код
Для удаления наблюдателя вы можете использовать функцию deinit swift.
источник
Версия Swift 3.0 ++
В вашем
viewDidLoad
, зарегистрироваться в центре уведомлений, чтобы прослушать это открытое из фонового действияЗатем добавьте эту функцию и выполните необходимые действия
Наконец добавьте эту функцию, чтобы очистить наблюдателя уведомлений, когда ваш контроллер представления разрушен.
источник
Свифт 4.2. версия
Зарегистрируйтесь в NotificationCenter,
viewDidLoad
чтобы получать уведомления, когда приложение возвращается из фонаРеализуйте метод, который должен быть вызван.
Вы можете удалить наблюдателя после
ViewController
уничтожения. Это требуется только ниже iOS9 и MacOS 10.11источник
Просто зарегистрируйте контроллер вида для
UIApplicationWillEnterForegroundNotification
уведомления и отреагируйте соответствующим образом.источник
viewDidLoad
как @nsgulliver. ВыviewDidAppear
также позвоните,doYourStuff
чтобы установить метку с желаемым значением.Я думаю, что регистрация для UIApplicationWillEnterForegroundNotification является рискованной, так как вы можете получить более одного контроллера, реагирующего на это уведомление. Ничто не гарантирует, что эти контроллеры все еще видны при получении уведомления.
Вот что я делаю: я принудительно вызываю viewDidAppear на активном контроллере прямо из делегата приложения методом didBecomeActive:
Добавьте код ниже, чтобы
- (void)applicationDidBecomeActive:(UIApplication *)application
источник
попробуйте добавить это в AppDelegate applicationWillEnterForeground.
источник
Согласно документации Apple:
Описание:
Сообщает дочернему контроллеру, что его внешний вид скоро изменится. Если вы реализуете пользовательский контроллер контейнера, используйте этот метод, чтобы сообщить дочернему элементу о том, что его представления должны появиться или исчезнуть . Не вызывать
viewWillAppear:
,viewWillDisappear:
,viewDidAppear:
илиviewDidDisappear:
непосредственно .Описание:
Сообщает дочернему контроллеру, что его внешний вид изменился. Если вы реализуете пользовательский контроллер контейнера, используйте этот метод, чтобы сообщить дочернему элементу, что переход представления завершен.
Образец кода:
Вопрос: как я исправил?
Ответ : Я нашел этот кусок строк в приложении. Эти строки заставили мое приложение не получать никаких уведомлений ViewWillAppear. Когда я прокомментировал эти строки, все работает нормально .
источник