Swiftui iOS应用程序和;iOS 14的小部件

Swiftui iOS应用程序和;iOS 14的小部件,swiftui,widgetkit,Swiftui,Widgetkit,我目前正在为我的应用程序创建第一个小部件。 数据通过API调用获得。我想知道是否可以从应用程序发出此请求,然后将此请求的结果发送到小部件?(有点像手表的连接功能) 感谢您的帮助:-)是的,这可以使用WidgetCenterAPI之一重新加载时间线 ... // make API call // store data in shared storage that the Widget uses WidgetCenter.shared.reloadAllTimelines() // OR Wid

我目前正在为我的应用程序创建第一个小部件。 数据通过API调用获得。我想知道是否可以从应用程序发出此请求,然后将此请求的结果发送到小部件?(有点像手表的连接功能)


感谢您的帮助:-)

是的,这可以使用
WidgetCenter
API之一重新加载时间线

...
// make API call
// store data in shared storage that the Widget uses


WidgetCenter.shared.reloadAllTimelines()
// OR
WidgetCenter.shared.reloadTimelines(ofKind: "WidgetKind")


请注意,它很可能更倾向于使用
reloadTimeline(ofKind:“WidgetKind”)
,因为它只会重新加载特定小部件的时间线。“WidgetKind”可以在WidgetConfiguration定义中找到

通常小部件不应该直接从应用程序接收任何数据。小部件有一个概念,它生成由时间线条目组成的时间线。每个条目指定更新小部件内容和内容本身的日期和时间。如果需要从服务器获取内容,您可以在时间线提供程序的方法中使用标准的
URLSession
API,并将数据附加到时间线条目中。这就是时间线提供程序在其方法中将完成处理程序作为参数的原因:

func getTimeline(在:Self.Context中,完成:(Timeline)->Void)

WidgerCenter
API(
recloadAllTimelines()
reloadTimelines(种类:)
)应该用于在时间线更改时通知
WidgetKit
。例如,当用户在主应用程序中更改某些内容、向后端发送请求、使用新信息更新数据库时,您还需要启动小部件更新以获取更新的数据并刷新。

我不确定这个已接受的答案是否真的回答了这个问题。或者至少我从这个问题中了解到,这个人通过API调用请求数据,然后他希望将该数据从主应用发送到widgetExtension,以便他可以在他的小部件上显示。只要开发人员使用应用程序组将API调用的数据存储在共享存储中,这种情况就可以处理。widget不会持续运行进程,因此我不认为有一种方法可以在不使用共享存储的情况下将数据从应用程序“发送”到widget。这可能会帮助您:这是否回答了您的问题?