iOS14.5 Widget 数据不是最新的

Posted

技术标签:

【中文标题】iOS14.5 Widget 数据不是最新的【英文标题】:iOS14.5 Widget data not up-to-date 【发布时间】:2021-05-14 22:32:21 【问题描述】:

我使用以下代码更新小部件的时间线,但我从核心数据中获取的“结果”不是最新的。

我的逻辑是当检测到主机应用程序进入后台时,我调用“WidgetCenter.shared.reloadAllTimelines()”并在“getTimeline”函数中获取核心数据。打印出结果后,是旧数据。另外,我在 .background 下使用相同谓词获取数据,数据是最新的。

我还在小部件视图正文中显示日期,当我关闭主机应用程序时,日期会刷新。意味着上面的刷新逻辑工作正常。但总是获取旧数据。

有人可以帮帮我吗?

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) 
        var entries: [SimpleEntry] = []
        let now = Date()
        let newRequest = coreDataManager.fetchRequestForTimeline(date: now)
        let result = try? viewContext.fetch(newRequest)
        print(result!)
        print("new####")
        entries.append(SimpleEntry(date: now, tasks: result))
        let timeline = Timeline(entries: entries, policy: .never)
        completion(timeline)
    

这是宿主应用程序中的代码

case .background:
                        WidgetCenter.shared.reloadAllTimelines()
                        // fetch here
                        print("App is in background")

更新:

我在获取之前添加了以下代码来刷新核心数据。一切正常。

// refresh the core data
try? viewContext.setQueryGenerationFrom(.current)
viewContext.refreshAllObjects()

【问题讨论】:

我遇到了类似的问题:***.com/questions/67482411/…。我很想知道你对SimpleEntry 中的tasks 属性做了什么。我很难将 CloudKit 集成到我的小部件中,我怀疑这与 CloudKit 调用时间过长有关。我很想知道您如何处理核心数据。谢谢! @West1 你好,我的问题已经解决了。请检查“更新”部分。我检查了您的帖子,您是否将 cloudkit 容器部署到生产环境中?您可以在 CloudKit 仪表板上找到它。 看来将 CloudKit 容器部署到生产环境是我的问题的答案。我已经为这个问题苦苦挣扎了两个星期,而你只是随便解决了它。如果您发布我的问题的答案,我会接受。非常感谢!你让我很快乐! :) @West1 很高兴听到这个消息! 【参考方案1】:

更新:

我在获取之前添加了以下代码来刷新核心数据。一切正常。

// refresh the core data
try? viewContext.setQueryGenerationFrom(.current)
viewContext.refreshAllObjects()

【讨论】:

以上是关于iOS14.5 Widget 数据不是最新的的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14.5 解决绿屏问题,苹果新品 3 月 16 日见

iOS 14.5再次更新!绿屏修复,续航加长?

iOS 14.5再次更新!绿屏修复,续航加长?

iOS 14.5,支持戴口罩解锁iPhone!

iOS 14.5,支持戴口罩解锁iPhone!

iOS 14.5 Btea3更新,AirTags要来了!