微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何每天12:00 AM自动更新iOS小部件?

如何解决如何每天12:00 AM自动更新iOS小部件?

Xcode提供此代码每小时更新5次:

    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()
        for hourOffset in 0 ..< 5 {
            let entryDate = Calendar.current.date(byAdding: .hour,value: hourOffset,to: currentDate)!
            let entry = SimpleEntry(date: entryDate)
            entries.append(entry)
        }

        let timeline = Timeline(entries: entries,policy: .atEnd)
        completion(timeline)
    }

我尝试过此操作,但更新不正确。

        var entries: [SimpleEntry] = []
        let currentDate = Date()
        let entryDate = Calendar.current.date(byAdding: .day,value: 1,to: currentDate)!
        let entry = SimpleEntry(..)
        entries.append(entry)

        let timeline = Timeline(entries: entries,policy: .atEnd)
        completion(timeline)

当我在设备上运行时,它会更新,但感觉好像并没有持续更新。绝对不是每天更新一次。

解决方法

您遇到两个问题:

  1. 您唯一的时间表条目是将来的条目。您需要在当前时间(或更早的时间)添加一个,以使小部件现在可以使用。
  2. 您要为currentDate添加一天,这是当前日期和时间,因此,如果今天的运行时间是今天的下午2:30,则明天的下午2:30会刷新。 / li>

尝试一下:

func getTimeline(in context: Context,completion: @escaping (Timeline<SimpleEntry>) -> ()) {

    // Generate a timeline with one entry that refreshes at midnight.
    let currentDate = Date()
    let startOfDay = Calendar.current.startOfDay(for: currentDate)
    let endOfDay = Calendar.current.date(byAdding: .day,value: 1,to: startOfDay)!
    
    let entry = SimpleEntry(date: startOfDay)
    let timeline = Timeline(entries: [entry],policy: .after(endOfDay))
    completion(timeline)
}

在这里,我使用了Calendar.current.startOfDay()方法来获取用于输入的日期。然后,我在其中添加一天以获取今晚的午夜,这将在时间轴的刷新策略中使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。