Есть ли способ уловить момент, когда пользователь скрывает панель уведомлений с помощью виджета? Я хочу сохранить некоторую информацию в базе данных в этот момент (я хочу, чтобы она была похожа на applicationDidEnterBackground:
). Любые другие идеи о том, как сохранить данные в последний момент, также будут оценены.Можно ли определить, когда скрывается виджет iOS?
ответ
Обычно ваш виджет будет экземпляром UIViewController
, соответствующим протоколу NCWidgetProviding
. Это означает, что вы можете воспользоваться функциональностью UIViewController
«s и выполнить свой код в
- (void)viewWillDisappear:(BOOL)animated;
или
- (void)viewDidDisappear:(BOOL)animated;
Я проверил его, и он работал.
@ Правильно, что обычные жизненные методы UIViewController
будут вызваны, когда ваш виджет отключится от экрана, но ваш контроллер также будет освобожден вскоре после этого, а его процесс будет приостановлен. Поэтому, если вам нужно сделать некоторые операции ввода-вывода, у вас нет гарантии, что он будет завершен.
Рекомендуемый способ сохранения процесса расширения - запросить утверждение задачи с помощью performExpiringActivityWithReason:usingBlock:
.
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSProcessInfo.processInfo().performExpiringActivityWithReason("because", usingBlock: { (expired) -> Void in
if expired {
NSLog("expired")
} else {
// save state off to database
}
})
}
Отличное дополнение! Большое спасибо! –
Основным недостатком этого метода является то, что он доступен с iOS 8.2. –
Их также вызывают, когда ваш виджет прокручивается на экране или пользователь блокирует экран или переключается с «Сегодня» на «Уведомления». Я не знаю, как конкретно определить, что центр уведомления закрыт. –
Это хорошо. Спасибо. Это действительно странно, как я пропустил это ... –