【问题标题】:iOS 14 Widget auto-refresh every dayiOS 14 Widget 每天自动刷新
【发布时间】:2021-01-21 00:32:06
【问题描述】:

我玩过新的 iOS 14 小部件,除了自动刷新外,似乎工作得差不多了。我的目标是让我的小部件在每个午夜刷新一次(因此,每天只刷新一次,当然偶尔会在我的应用程序中发生某些事情时)。在 XCode 中,我将其设置为每分钟刷新一次,并且似乎非常随机地工作 - 所以它可能在我测试的 10 分钟内刷新一次,但我想,没关系,因为我读到刷新是由 iOS 处理的,所以它迟早会出现,但终会到来。

现在,我已经发布了我的应用程序的这个版本,今天早上(早上 8 点左右,午夜过后)我检查了我的小部件,但今天没有更新。

我的问题,我做错了吗?还是只是还没有那么稳定?

我的时间线仅包含一个带有date: now 且刷新策略设置为.after(nextMidnight) 的项目。 我还尝试了刷新策略.atEnd,但是由于我在时间轴中只有一个设置为现在的项目,它不会尝试持续刷新吗?我想,.after 是更好的方法。

如果它是相关的,它是StaticConfiguration 而不是IntentConfiguration(老实说,我仍然需要深入研究这里的区别......)。

代码sn-p:

    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        let now = Date()
        let calendar = Calendar.current
        var dateComponents = DateComponents()
        dateComponents.year = calendar.component(.year, from: now)
        dateComponents.month = calendar.component(.month, from: now)
        dateComponents.day = calendar.component(.day, from: now) + 1
        dateComponents.hour = 0
        dateComponents.minute = 0
        dateComponents.second = 0
        let nextUpdate = calendar.date(from: dateComponents)
        
        completion(Timeline(entries: [SimpleEntry(date: now)], policy: .after(nextUpdate!)))
    }

【问题讨论】:

标签: swift swiftui ios14 widgetkit


【解决方案1】:

其实好像是我忽略了,小部件居然刷新了,是我自己没有刷新数据。 (我正在使用 UserDefaults 在我的应用程序和小部件之间共享数据,即使小部件正确刷新,由于 UserDefaults 中的数据没有更新,同样会一遍又一遍地显示。)

【讨论】:

    【解决方案2】:

    这应该可以为您节省几行代码:

    let nextUpdate = Calendar.autoupdatingCurrent.date(byAdding: .day, value: 1, to: Calendar.autoupdatingCurrent.startOfDay(for: Date()))!
    

    【讨论】:

    • 由于某种原因,这会导致我的小部件在第一天过去之前无法加载,即使当前的Date() 正在用于第一个时间线条目。我错过了什么吗?
    • 您需要有一个初始的小部件加载/重新加载。我不知道你想要它,但我有我的 if #available(iOS 14.0, *) { WidgetCenter.shared.reloadAllTimelines() print("Widgets relaoded!") } 每当应用程序加载以及我需要立即重新加载小部件数据时。
    • 我认为小部件最初是在第一个时间线条目日期加载的。您如何保证在放置小部件时调用您的代码? IE,他们放置小部件但不打开您的应用程序。我误会了。感谢您的帮助。
    猜你喜欢
    • 2021-01-10
    • 2021-02-05
    • 2012-12-19
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多