WidgetKit不更新

问题描述

例如,我希望我的小部件每5秒更新一次。我不知道为什么它不起作用。代码应该正确。

更新代码

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(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 []
}

//章节是一个结构,它是SimpleEntry中的一个变量。

struct SimpleEntry: TimelineEntry {
    let date: Date
    let chapter: Chapter
}
,

您每次都在同一日期添加时间线条目:

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)
}

相反,请使用var并对其进行更新:

var entryDate = Date()
for _ in 0 ..< 5 {
    entryDate = Calendar.current.date(byAdding: .minute,to: entryDate)!
    let entry = SimpleEntry(date: entryDate,clubname: networkManager.clubName)
    entries.append(entry)
}