无法每分钟刷新 WidgetView
Posted
技术标签:
【中文标题】无法每分钟刷新 WidgetView【英文标题】:Can't refresh WidgetView every minute 【发布时间】:2020-11-05 06:56:24 【问题描述】:我无法每分钟都刷新我的小部件。这是我的 getTimeline 函数;
let currentDate = Date()
let refreshDate = Calendar.current.date(byAdding: .minute, value: 1, to: currentDate)!
guard let widget = try? JSONDecoder().decode([myWidgets].self, from: widgetData)
let entry = widgetEntry(date: Date(), widget: widget[0])
let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
completion(timeline)
WidgetCenter.shared.reloadAllTimelines()
我也尝试过每秒刷新一次,只刷新日期以显示当前时间,但几秒钟后它会停止刷新。
然后我从@pawello2222 尝试了下面的代码,但小部件没有正确加载;
var entries = [widgetEntry]()
let currentDate = Date()
let midnight = Calendar.current.startOfDay(for: currentDate)
let nextMidnight = Calendar.current.date(byAdding: .day, value: 1, to: midnight)!
for offset in 0 ..< 60 * 24
guard let widget = try? JSONDecoder().decode([myWidgets].self, from: widgetData)
let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: midnight)!
entries.append(widgetEntry(date: entryDate, widget: widget[0]))
let timeline = Timeline(entries: entries, policy: .after(nextMidnight))
completion(timeline)
【问题讨论】:
这是否回答了您的问题***.com/a/64086553/12299030? @Asperi 我尝试了那个解决方案,没有图像,一切都很好。但是当我将背景图像甚至系统图像放在 HStack 上时,它不会呈现,只有占位符。 我在您的代码快照中没有看到任何图像。您会根据上面的评论提供可重现的示例吗? 【参考方案1】:我还尝试过每秒刷新一次,只将日期刷新到 显示当前时间,但几秒钟后停止刷新。
您的小部件只有有限数量的刷新。如果您每秒调用一次WidgetCenter.shared.reloadAllTimelines()
,您的 Widget 很可能很快就会用完可用的更新。
另外,你不应该在getTimeline()
中调用reloadAllTimelines()
:
...
completion(timeline)
WidgetCenter.shared.reloadAllTimelines() // remove this
然后我从@pawello2222 尝试了下面的代码,但小部件不是 正确加载它
我假设您指的是这个答案:Updating time text label each minute in WidgetKit
请注意,在您的代码中guard let
可能无法通过:
for offset in 0 ..< 60 * 24
guard let widget = try? JSONDecoder().decode([myWidgets].self, from: widgetData) // you need `else ... return ` here
let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: midnight)!
entries.append(widgetEntry(date: entryDate, widget: widget[0]))
见:When to use guard let rather than if let
【讨论】:
我认为问题在我看来。在尝试了您的建议后,它在一个简单的视图中工作,只有图像和时间。您是否知道在 JSONDecoder 数据更改时更新小部件数据? @BaturayKoç 这取决于数据如何/何时更改。在您的问题中,没有关于myWidgets
变量是什么的信息。我建议您创建一个新问题来描述您的问题。我会尽力帮助你。以上是关于无法每分钟刷新 WidgetView的主要内容,如果未能解决你的问题,请参考以下文章
PFQueryTableView 在新数据更新或每分钟使用 Parse 刷新时自动刷新
定时器自动刷新浏览器中的 HTML 页面 - 每 15 分钟