Где обновить интерфейс виджета уведомлений только один раз

В моем расширении / виджете для Центра уведомлений сегодня мне нужно обновлять часть интерфейса каждый раз, когда Центр уведомлений активируется. Его не нужно обновлять, когда используется Центр уведомлений или в фоновом режиме. В каком методе я должен разместить этот код?

viewDidLoad а также viewWillAppear они оба вызываются каждый раз, когда он будет отображаться, например, если вы прокрутите вверх и вниз, они будут вызваны снова, так что это слишком часто.

widgetPerformUpdateWithCompletionHandler он не вызывается вообще, пока не отобразится в первый раз (кажется, по крайней мере, с бета-версией iOS 8.2), и этот метод автоматически вызывается всякий раз, когда iOS хочет обновить пользовательский интерфейс, даже когда он находится в фоновом режиме, что тоже не подходит.

loadView вызывается только один раз, никогда не будет вызван снова, если виджет не будет удален из памяти. Поэтому, если вы откроете Центр уведомлений и просмотрите виджет, затем закроете Центр уведомлений и снова откроете его позже, он может не вызвать этот метод снова в зависимости от того, был ли он удален из памяти.

1 ответ

Решение

Я бы просто использовал viewDidLoad и не беспокоиться о возможности нескольких звонков. Если метод не требует много времени для запуска, нет причин не делать это таким образом. [И если запуск займет много времени, ваше сегодняшнее расширение будет плохим, так что исправьте это.]

Если по какой-то причине вы хотите, чтобы это произошло только один раз, добавьте BOOL ивару в класс. Установите это YES в initWithCoder: Затем в viewDidLoad проверьте это значение. Если это YES, сделайте свое обновление и установите значение NO, Если это уже NO пропустите обновление.

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