Swift WidgetKit未更新

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

我希望我的小部件每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(对于配置: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)
}