Есть ли способ остановить сегодняшнее расширение iOS, отправляющее запросы API в фоновом режиме?

Я пытаюсь перестать отправлять запросы API в фоновом режиме, когда сегодняшнее расширение не видно. Запросы API стоят довольно дорого, поэтому хотелось бы оптимизировать количество отправляемых запросов. Где я должен поместить запрос API, чтобы он вызывался только тогда, когда сегодняшнее расширение станет видимым и не будет вызываться в фоновом режиме?

Я уже пытался установить NCUpdateResultNoData, однако в этом случае viewDidLoad вызывается в фоновом режиме. В viewDidLoad я отправляю запрос API для обновления сегодняшнего расширения, когда оно становится видимым.

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
    completionHandler(NCUpdateResultNoData);
}

person Anton Chuiko    schedule 22.01.2019    source источник


Ответы (1)


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

Из документов:

// Если виджет имеет локальное состояние, которое можно быстро загрузить, он должен сделать это перед возвратом из ‘viewWillAppear:’. // В противном случае виджет должен гарантировать, что состояние и макет его представления при возврате из 'viewWillAppear:' будут соответствовать тому, что было в последний раз, когда он возвращался из 'viewWillDisappear:', плавно переходя к новым данным позже, когда они поступят».

person Mosbah    schedule 22.01.2019
comment
К сожалению, viewWillAppear и viewDidAppear также вызываются, когда система делает снимки в фоновом режиме. - person Anton Chuiko; 26.01.2019