繁体   English   中英

iOS14 小部件可以请求主应用程序更新其数据吗?

[英]Can iOS14 widget requests main app to update its data?

我的应用需要最新数据,但主应用可能有旧数据。

所以我想请求主应用程序更新其数据。

可能吗?

如果不是,我想知道任何替代方式。

(小部件是否应该向服务器请求最新数据??)

谢谢

=== 更新

我发现了很多教程,它们都使用来自getTimeline方法的 http 请求来获取最新数据(而不是来自主应用程序)。 这不是我想要的。

有人说在主应用程序和小部件之间共享数据的最简单方法是使用 UserDefaults。 但是,如果主应用程序不更新用户默认值或使用旧数据更新值,则数据可能是旧的。 (服务器数据旁边始终是最新数据)

所以我想知道的是“小部件使主应用程序更新其数据并更新 userdefault 并调用reloadTimelines的方式。 所以小部件可以使用最新数据。

Widget 无法告诉其父 App 刷新其数据。

您可以:

WidgetCenter.shared.reloadAllTimelines()

实际上,直接在 Widget 中获取数据可能会更好。 这样您就可以只获取必要的数据 - 小部件视图通常显示的信息比应用程序视图少得多。

是的,你可以喜欢这个; 当您为小部件更新创建 TimelineProvider 时,您必须实现此功能,

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

此函数等待创建您的小部件更新时间线。 您可以发送请求,响应后,您可以创建时间线并返回 func 的完成情况。

您可以配置应用程序组并将数据库存储在该共享组目录中。 这样,如果您在主应用程序或小部件中更新数据,这些新数据对两者都可用,无需调用另一个来再次加载相同的数据。 请注意,您仍然应该使用

WidgetCenter.shared.reloadAllTimelines()

在您更新主应用程序中的数据以立即刷新小部件后。 只需对执行最后一个请求的时间进行一些处理,这样您就不会在小部件中创建不必要的请求,而是从数据库中获取它们。

如果您将执行请求的代码移动到模块中,您也可以在小部件中使用它,就像在应用程序中一样。 最后,您将在主应用程序中再次调用您习惯的相同更新代码。

由于我没有您的任何代码要更新并在此处显示,因此我将链接一些有用的资源以用于到达所述目的地的方式。

Apple 文档:配置应用程序组

在应用程序组内共享数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM