我目前正在为我的应用程序创建我的第一个小部件。 数据是通过API调用获得的。我想知道是否可以从应用程序发出此请求,然后将该请求的结果发送到小部件? (有点类似于WatchConnectivity的手表)
感谢您的帮助:-)
答案 0 :(得分:3)
是的,可以使用WidgetCenter
API之一来重新加载您的时间轴。
...
// make API call
// store data in shared storage that the Widget uses
WidgetCenter.shared.reloadAllTimelines()
// OR
WidgetCenter.shared.reloadTimelines(ofKind: "WidgetKind")
请注意,最可能使用reloadTimelines(ofKind: "WidgetKind")
,因为它只会重新加载特定窗口小部件的时间轴。在您的WidgetConfiguration定义中可以找到“ WidgetKind”
答案 1 :(得分:3)
通常,小部件不应直接从应用程序接收任何数据。小部件具有TimelineProvider
的概念,该概念生成由时间线条目组成的时间线。每个条目都指定了更新小部件内容和内容本身的日期和时间。如果需要从服务器获取内容,则可以在时间轴提供程序的方法中使用标准的URLSession
API,并将数据附加到时间轴条目中。因此,时间轴提供商在其方法中将完成处理程序作为参数:
func getTimeline(in: Self.Context, completion: (Timeline<Self.Entry>) -> Void)
WidgerCenter
API(recloadAllTimelines()
或reloadTimelines(ofKind:)
)应该用于在时间线更改时通知WidgetKit
。例如,当用户在主应用程序中更改某些内容,将请求发送到后端,使用新信息更新数据库时,您还需要启动小部件更新以获取更新的数据并刷新。