WidgetKit không cập nhật

Oct 01 2020

Tôi muốn Widget của mình cập nhật ví dụ 5 giây một lần. Tôi không biết tại sao nó không hoạt động. Mã phải đúng.

Mã cập nhật:

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

Trả lời

1 Cagatay Oct 01 2020 at 03:57

Bởi vì bạn đã thêm cùng một mục nhập. Nếu bạn thay đổi giá trị như ví dụ dưới đây, nó sẽ được làm mới.

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

// Chương là một cấu trúc, nó là một biến trong SimpleEntry.

struct SimpleEntry: TimelineEntry {
    let date: Date
    let chapter: Chapter
}
Darkpaw Oct 03 2020 at 19:45

Bạn đang thêm một mục dòng thời gian cho cùng một ngày mọi lúc:

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

Thay vào đó, hãy sử dụng một var và cập nhật:

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