ios 14 小部件:如何在 UserDefaults 更改后重新加载时间线
ios 14 widget: How to reload timeline after UserDefaults changed
我有一个 ios 14 小部件,每 5 分钟刷新一次
let timeline = Timeline(entries: entries, policy: .atEnd)
entries
取决于我的 MainApp 上的配置。
我使用UserDefaults
在MainApp和Widget之间共享数据。
@AppStorage("FollowingCatalog", store: UserDefaults(suiteName: "group.vn.f19.com"))
var catalogItemsData: Data = Data()
我已经根据 UserDefaults
数据成功镜像了小部件内容。但我的问题是我的小部件仅在 .atEnd 政策之后每 5 分钟刷新一次 UI
这会导致糟糕的用户体验
如何在 UserDefaults
中的配置更改后立即刷新小部件内容?
感谢您的支持。
在 Keeping a Widget Up to Date by Apple 中,要通知您的小部件更新其时间线和内容,您调用:
WidgetCenter.shared.reloadAllTimelines()
这会重新加载您的应用程序拥有的所有小部件。如果您想重新加载特定的小部件(如果您的应用有多种不同的小部件类型),请改用 WidgetCenter.shared.reloadTimelines(ofKind: "com.myApp.myWidget")
。
为了阐明整个工作流程,我在这里添加一些注释:
您不仅可以从 widget
调用 WidgetCenter
,还可以从您的主应用调用。
WidgetCenter.shared.reloadAllTimelines()
WidgetCenter.shared.reloadTimelines(ofKind: "com.myApp.myWidget........")
所以流程是:
用户在 MainApp 上进行了一些更改,例如:我重新排列了以下列表中的库存项目
MainApp保存数据到UserDefaults
,eg:保存列表项顺序
MainApp 触发重新加载小部件:
WidgetCenter.shared.reloadTimelines(ofKind: "mone24h_widget")
您可以通过查看您的小部件条目文件来获取 kind
:
@main
struct mone24h_widget: Widget {
let kind: String = "mone24h_widget"
Widget 会重新加载时间线,我会从UserDefaults
这里获取共享数据。完成工作。例如:Re-render 我的股票列表基于从 MainApp 传递的安排
顺便说一句,如果您使用的是 react-native,我已经创建了一个模块来支持这个问题:
我有一个 ios 14 小部件,每 5 分钟刷新一次
let timeline = Timeline(entries: entries, policy: .atEnd)
entries
取决于我的 MainApp 上的配置。
我使用UserDefaults
在MainApp和Widget之间共享数据。
@AppStorage("FollowingCatalog", store: UserDefaults(suiteName: "group.vn.f19.com"))
var catalogItemsData: Data = Data()
我已经根据 UserDefaults
数据成功镜像了小部件内容。但我的问题是我的小部件仅在 .atEnd 政策之后每 5 分钟刷新一次 UI
这会导致糟糕的用户体验
如何在 UserDefaults
中的配置更改后立即刷新小部件内容?
感谢您的支持。
在 Keeping a Widget Up to Date by Apple 中,要通知您的小部件更新其时间线和内容,您调用:
WidgetCenter.shared.reloadAllTimelines()
这会重新加载您的应用程序拥有的所有小部件。如果您想重新加载特定的小部件(如果您的应用有多种不同的小部件类型),请改用 WidgetCenter.shared.reloadTimelines(ofKind: "com.myApp.myWidget")
。
为了阐明整个工作流程,我在这里添加一些注释:
您不仅可以从 widget
调用 WidgetCenter
,还可以从您的主应用调用。
WidgetCenter.shared.reloadAllTimelines()
WidgetCenter.shared.reloadTimelines(ofKind: "com.myApp.myWidget........")
所以流程是:
用户在 MainApp 上进行了一些更改,例如:我重新排列了以下列表中的库存项目
MainApp保存数据到
UserDefaults
,eg:保存列表项顺序MainApp 触发重新加载小部件:
WidgetCenter.shared.reloadTimelines(ofKind: "mone24h_widget")
您可以通过查看您的小部件条目文件来获取
kind
:@main struct mone24h_widget: Widget { let kind: String = "mone24h_widget"
Widget 会重新加载时间线,我会从
UserDefaults
这里获取共享数据。完成工作。例如:Re-render 我的股票列表基于从 MainApp 传递的安排
顺便说一句,如果您使用的是 react-native,我已经创建了一个模块来支持这个问题: