我正在使用XCode 12 beta 2(iOS 14 Sim)使用AppContainer将数据从我的应用程序传递到 WidgetKit 。
我正在使用以下代码将数据(此处为String)保存到应用容器。
let userDefaults = UserDefaults(suiteName: "group.abc.WidgetDemo")
userDefaults?.setValue(status, forKey: "widget")
userDefaults?.synchronize()
并在Widget.swift文件中
struct Provider: TimelineProvider {
@AppStorage("widget", store: UserDefaults(suiteName: "group.abc.WidgetDemo"))
var status: String = String()
public func snapshot(with context: Context, completion: @escaping (MyEntry) -> ()) {
let entry = MyEntry(status: status, date: Date())
completion(entry)
}
public func timeline(with context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
let entryDate = Calendar.current.date(byAdding: .second, value: 10, to: Date())!
let entry = MyEntry(status: status, date: entryDate)
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion(timeline)
}
}
请注意:时间轴输入是当前日期之后的10秒。即使延迟了10秒,我也无法在 WidgetKit 中看到更新的信息。
最佳答案
显然,在阅读了文档之后,我碰巧通过使用以下内容使其工作
WidgetCenter.shared.reloadTimelines(ofKind: "WidgetDemo")
但是,如果有时,以上方法不起作用,我会尝试重新加载所有时间表。 WidgetCenter.shared.reloadAllTimelines()
请注意:重载时间轴代码写在源文件中,即我们正在传输数据的位置。