2015-07-30 1 views
1

Есть ли способ уловить момент, когда пользователь скрывает панель уведомлений с помощью виджета? Я хочу сохранить некоторую информацию в базе данных в этот момент (я хочу, чтобы она была похожа на applicationDidEnterBackground:). Любые другие идеи о том, как сохранить данные в последний момент, также будут оценены.Можно ли определить, когда скрывается виджет iOS?

ответ

3

Обычно ваш виджет будет экземпляром UIViewController, соответствующим протоколу NCWidgetProviding. Это означает, что вы можете воспользоваться функциональностью UIViewController «s и выполнить свой код в

- (void)viewWillDisappear:(BOOL)animated;

или

- (void)viewDidDisappear:(BOOL)animated; 

Я проверил его, и он работал.

+0

Их также вызывают, когда ваш виджет прокручивается на экране или пользователь блокирует экран или переключается с «Сегодня» на «Уведомления». Я не знаю, как конкретно определить, что центр уведомления закрыт. –

+0

Это хорошо. Спасибо. Это действительно странно, как я пропустил это ... –

2

@ Правильно, что обычные жизненные методы 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 
     } 
    }) 
} 
+0

Отличное дополнение! Большое спасибо! –

+0

Основным недостатком этого метода является то, что он доступен с iOS 8.2. –

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

  • Нет связанных вопросов^_^