Где обновить интерфейс виджета уведомлений только один раз
В моем расширении / виджете для Центра уведомлений сегодня мне нужно обновлять часть интерфейса каждый раз, когда Центр уведомлений активируется. Его не нужно обновлять, когда используется Центр уведомлений или в фоновом режиме. В каком методе я должен разместить этот код?
viewDidLoad
а также viewWillAppear
они оба вызываются каждый раз, когда он будет отображаться, например, если вы прокрутите вверх и вниз, они будут вызваны снова, так что это слишком часто.
widgetPerformUpdateWithCompletionHandler
он не вызывается вообще, пока не отобразится в первый раз (кажется, по крайней мере, с бета-версией iOS 8.2), и этот метод автоматически вызывается всякий раз, когда iOS хочет обновить пользовательский интерфейс, даже когда он находится в фоновом режиме, что тоже не подходит.
loadView
вызывается только один раз, никогда не будет вызван снова, если виджет не будет удален из памяти. Поэтому, если вы откроете Центр уведомлений и просмотрите виджет, затем закроете Центр уведомлений и снова откроете его позже, он может не вызвать этот метод снова в зависимости от того, был ли он удален из памяти.
1 ответ
Я бы просто использовал viewDidLoad
и не беспокоиться о возможности нескольких звонков. Если метод не требует много времени для запуска, нет причин не делать это таким образом. [И если запуск займет много времени, ваше сегодняшнее расширение будет плохим, так что исправьте это.]
Если по какой-то причине вы хотите, чтобы это произошло только один раз, добавьте BOOL
ивару в класс. Установите это YES
в initWithCoder:
Затем в viewDidLoad
проверьте это значение. Если это YES
, сделайте свое обновление и установите значение NO
, Если это уже NO
пропустите обновление.