Swift WidgetKit未更新
我希望我的小部件每5秒更新一次。我不知道为什么它不起作用。代码应该是正确的 更新代码:Swift WidgetKit未更新,swift,swiftui,widgetkit,Swift,Swiftui,Widgetkit,我希望我的小部件每5秒更新一次。我不知道为什么它不起作用。代码应该是正确的 更新代码: func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = [] let currentDa
func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
let currentDate = Date()
for _ in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .minute, value: 60, to: currentDate)!
let entry = SimpleEntry(date: entryDate, configuration: configuration, clubname: networkManager.clubName)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
func getTimeline(对于配置:configurationcontent,在上下文:context中,完成:@escaping(Timeline)->()){
变量项:[SimpleEntry]=[]
让currentDate=Date()
对于0..<5中的uu{
让entryDate=Calendar.current.date(通过添加:。分钟,值:60,到:currentDate)!
let entry=SimpleEntry(日期:entryDate,配置:configuration,clubname:networkManager.clubname)
条目。追加(条目)
}
let timeline=timeline(条目:条目,策略:.atEnd)
完成(时间表)
}
因为您添加了相同的条目。如果像下面的示例那样更改该值,它将被刷新
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date.
let currentDate = Date()
let chapter = getChapterWith(level: "1") // it is returned a array.
for index in 0 ..< chapter.count {
let entryDate = Calendar.current.date(byAdding: .second, value: index, to: currentDate)!
let entry = SimpleEntry(date: entryDate, chapter: chapter[index])
entries.append(entry)
}
let timelineDate = Calendar.current.date(byAdding: .second, value: 1, to: Date())!
let timeline = Timeline<SimpleEntry>(entries: entries, policy: .after(timelineDate))
completion(timeline)
}
func getChapterWith(level: String) -> [Chapter] {
return []
}
您每次都在为同一日期添加时间线条目:
let currentDate = Date() // currentDate = now
for _ in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .minute, value: 60, to: currentDate)! // entryDate is ALWAYS currentDate + 60 minutes
let entry = SimpleEntry(date: entryDate, configuration: configuration, clubname: networkManager.clubName)
entries.append(entry)
}
让currentDate=Date()//currentDate=now
对于0..<5中的uu{
让entryDate=Calendar.current.date(通过添加:.minute,值:60,to:currentDate)!//entryDate始终为currentDate+60分钟
let entry=SimpleEntry(日期:entryDate,配置:configuration,clubname:networkManager.clubname)
条目。追加(条目)
}
相反,请使用var并更新:
var entryDate = Date()
for _ in 0 ..< 5 {
entryDate = Calendar.current.date(byAdding: .minute, value: 60, to: entryDate)!
let entry = SimpleEntry(date: entryDate, configuration: configuration, clubname: networkManager.clubName)
entries.append(entry)
}
var entryDate=Date()
对于0..<5中的uu{
entryDate=Calendar.current.date(通过添加:。分钟,值:60,到:entryDate)!
let entry=SimpleEntry(日期:entryDate,配置:configuration,clubname:networkManager.clubname)
条目。追加(条目)
}
这应该很有帮助。你是说我需要添加for循环?如果你想每5秒更新一次小部件,你需要提前创建条目。不可能如此频繁地刷新时间线。这里有一个可能的例子:你能检查更新的代码吗?@submariner但是你想在每个条目中显示什么?Sagol:)但是我得到错误找不到GetChapterWith你可以用字符串数组设置chapter变量。另外,您可以使用字符串变量更改SimpleEntry对象。很抱歉,我真的不明白您的意思。我不明白你在做什么:getChapterWith(级别:“1”)我更新了答案并添加到getChapterWithFunc的示例中。getChapterWith是一个返回特定于我的项目域的章节数组的函数。所以,我返回了空数组,您可以自定义它。如果我们不将其用于循环呢?数据只会更新一次?如果不循环,通常会发生这种情况,是的。。。¯_(ツ)_/''我无法理解它背后的逻辑,因为每次计划到来时都会调用它&它可以为下一次更新做好准备,那么什么是计划多次的高峰期呢?上面的循环添加了五个时间线条目,以便小部件在接下来的五个小时内每小时更新一次。时间线允许小部件更新在相关时间提供相关信息。由您决定小部件何时完全刷新其数据并创建新的时间线(替换旧的时间线)。您应该在每次刷新数据时设置相关的时间线。因此,逻辑是:数据到达>使用该数据创建时间线>新数据到达>使用该数据创建时间线。
var entryDate = Date()
for _ in 0 ..< 5 {
entryDate = Calendar.current.date(byAdding: .minute, value: 60, to: entryDate)!
let entry = SimpleEntry(date: entryDate, configuration: configuration, clubname: networkManager.clubName)
entries.append(entry)
}