Может ли виджет iOS14 запрашивать у основного приложения обновление данных?

моему приложению нужны последние данные, но, возможно, в основном приложении есть старые данные.

поэтому я хочу попросить основное приложение обновить его данные.

Является ли это возможным?

если это не так, я хотел бы знать какой-либо альтернативный способ.

(должен ли виджет запрашивать последние данные на сервере ??)

Благодарность

=== ОБНОВЛЕНИЕ

Я нашел много руководств, и все они используют http-запрос из метода getTimeline для получения новейших данных (не из основного приложения). это не то, что я хочу.

Кто-то сказал, что самый простой способ обмена данными между основным приложением и виджетами - использование UserDefaults. Но данные могут быть старыми, если основное приложение не обновляет значения userdefaults или обновляет значения с использованием старых данных. (рядом с данными сервера всегда самые свежие данные)

Итак, что я хочу знать, так это то, как виджет заставляет основное приложение обновлять свои данные и обновлять userdefault и вызывать reloadTimelines. так что виджет может использовать последние данные.


person WoffOVkee    schedule 08.10.2020    source источник


Ответы (2)


Виджет не может указать своему родительскому приложению обновить свои данные.

Вы также можете:

WidgetCenter.shared.reloadAllTimelines()

На самом деле, вероятно, лучше просто получать данные прямо в виджете. Таким образом, вы можете получить только необходимые данные - представления виджетов обычно отображают гораздо меньше информации, чем представления приложений.

person pawello2222    schedule 08.10.2020
comment
после нескольких дней исследований я написал весь код связи с сервером из кода виджета. ха-ха. Благодарность - person WoffOVkee; 06.11.2020

Да, вам это может понравиться; Когда вы создаете TimelineProvider для обновления виджета, вы должны реализовать эту функцию,

 func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())

Эта функция ожидает создания временной шкалы обновления виджета. Вы можете отправить запрос, после ответа вы можете создать временную шкалу и вернуть выполнение функции.

person Cagatay    schedule 08.10.2020
comment
Благодарю . Но это немного другое, что я хочу знать. Я редактировал свои вопросы. еще раз спасибо. - person WoffOVkee; 08.10.2020
comment
Виджет похож на «отдельное» приложение на вашем iPhone. Он не может попросить свое родительское приложение проснуться и получить новые данные. Вы либо извлекаете новые данные из виджета напрямую, либо ждете, пока родительское приложение откроется пользователем, извлечет новые данные и затем сохранит их в UserDefaults(suiteName: "your.suiteName") - person Starsky; 08.10.2020
comment
Ага. теперь я почти уверен, что мне нужно напрямую запросить сервер, если мне действительно нужно использовать последние данные. Благодарность - person WoffOVkee; 08.10.2020