iOS14.5 小部件数据不是最新的

iOS14.5 Widget data not up-to-date

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

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

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

有人可以帮我吗?

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

更新:

我在获取之前添加了以下代码来刷新核心数据。一切都按预期工作。

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