iOS14 小部件可以请求主应用程序更新其数据吗?
Can iOS14 widget requests main app to update its data?
我的应用需要最新数据,但主应用可能有旧数据。
所以我想请求主应用更新它的数据。
可能吗?
如果不是,我想知道任何替代方法。
(widget应该向服务器请求最新数据吗??)
谢谢
===
更新
我找到了很多教程,它们都使用来自 getTimeline
方法的 http 请求来获取最新数据(不是来自主应用程序)。这不是我想要的。
有人说在主应用程序和小部件之间共享数据的最简单方法是使用 UserDefaults。但是如果主应用程序不更新 userdefaults 值或使用旧数据更新值,则数据可能是旧的。 (旁边的服务器数据总是最新的数据)
所以我想知道的是“小部件使主应用程序更新其数据并更新 userdefault 并调用 reloadTimelines
的方式。所以小部件可以使用最新数据。
是的,你可以喜欢这个;
当你创建一个 TimelineProvider 用于 widget 更新时,你必须实现这个函数,
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())
此函数等待创建您的小部件更新时间轴。您可以发送请求,响应后,您可以创建时间线和 return 功能的完成。
Widget 无法通知其父 App 刷新其数据。
您可以:
- 直接在小部件中获取数据 - 参见:
- 在应用程序中启用后台通知(参见 How to run code when your app is terminated),并在收到通知时强制 Widget 使用以下方式刷新其时间线:
WidgetCenter.shared.reloadAllTimelines()
实际上,直接在 Widget 中获取数据可能会更好。这样您就可以只获取 必要的 数据 - 小部件视图通常比应用程序视图显示的信息少得多。
我的应用需要最新数据,但主应用可能有旧数据。
所以我想请求主应用更新它的数据。
可能吗?
如果不是,我想知道任何替代方法。
(widget应该向服务器请求最新数据吗??)
谢谢
=== 更新
我找到了很多教程,它们都使用来自 getTimeline
方法的 http 请求来获取最新数据(不是来自主应用程序)。这不是我想要的。
有人说在主应用程序和小部件之间共享数据的最简单方法是使用 UserDefaults。但是如果主应用程序不更新 userdefaults 值或使用旧数据更新值,则数据可能是旧的。 (旁边的服务器数据总是最新的数据)
所以我想知道的是“小部件使主应用程序更新其数据并更新 userdefault 并调用 reloadTimelines
的方式。所以小部件可以使用最新数据。
是的,你可以喜欢这个; 当你创建一个 TimelineProvider 用于 widget 更新时,你必须实现这个函数,
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ())
此函数等待创建您的小部件更新时间轴。您可以发送请求,响应后,您可以创建时间线和 return 功能的完成。
Widget 无法通知其父 App 刷新其数据。
您可以:
- 直接在小部件中获取数据 - 参见:
- 在应用程序中启用后台通知(参见 How to run code when your app is terminated),并在收到通知时强制 Widget 使用以下方式刷新其时间线:
WidgetCenter.shared.reloadAllTimelines()
实际上,直接在 Widget 中获取数据可能会更好。这样您就可以只获取 必要的 数据 - 小部件视图通常比应用程序视图显示的信息少得多。