#ios #widget #widgetkit
#iOS #виджет #widgetkit
Вопрос:
Я пытаюсь понять документацию Apple по фоновым сетевым запросам виджетов.
Чтобы обработать результат сетевого запроса, используйте модификатор onBackgroundURLSessionEvents(соответствующий:_:) конфигурации вашего виджета и выполните следующие действия:
- Сохраните ссылку на
completion
параметр. Вы вызываете обработчик завершения после обработки всех сетевых событий.- Используйте
identifier
параметр, чтобы найтиURLSession
объект, который вы использовали при инициировании фонового запроса. Если расширение вашего виджета было прекращено, используйте идентификатор для повторного созданияURLSession
.
Что касается первого пункта, о каком completion
параметре здесь идет речь? Это completion
параметр onBackgroundURLSessionEvents(matching:_:)
функции или, возможно, это обработчик завершения IntentTimelineProvider
‘s getTimeline(for:in:completion:)
? Если это первое, не означает ли это сохранение нескольких обработчиков завершения на случай нескольких событий? И какова цель вызова этого обработчика завершения?
Что касается второго пункта, как вы используете identifier
для воссоздания URLSession
? getTimeline(for:in:completion:)
Следует ли сохранять конфигурацию на диск для последующего доступа при повторном создании сеанса?
Чтобы обновить временную шкалу вашего виджета после завершения сетевого запроса, вызовите методы WidgetCenter из реализации urlSessionDidFinishEvents вашего делегата.
В этой части кажется, что они имеют в виду вызов метода WidgetCenter.shared.reloadTimelines(ofKind:)
. Однако не приведет ли это к обновлению всех экземпляров вашего виджета? Или система знает, что нужно обновлять только тот, который его вызвал?
Комментарии:
1. Дескриптор завершения — это второй параметр, передаваемый вашему
urlSessionEvent:
закрытию (закрытие, которое вы передаете в качестве второго параметраonBackgroundURLSessionEvents(matching:_:)
)2. Вы не используете
identifier
для воссоздания сеанса как такового; Вы используете идентификатор, чтобы попытаться восстановить существующий сеанс, который вы сохранили, но ваш код мог быть перезапущен, и сеанс больше не находится в памяти, и в этом случае вам нужно его создать3. @GilBirman вы когда-нибудь выясняли, как правильно использовать фоновые загрузки с виджетом?