小编Vic*_*lov的帖子

当 WidgetCenter.shared.reloadAllTimelines() 被调用时,WidgetKit 不会从 Core Data 获取更新的数据

该应用程序使用 Core Data + CloudKit。当应用程序启动时,WidgetKit 会从核心数据中获取正确的条目,但是当我从主应用程序向核心数据添加新条目并调用WidgetCenter.shared.reloadTimelines()更新的条目时,不会获取到旧数据,并且旧数据会显示在小部件内。

主应用程序和小部件目标具有相同的应用程序组,两个目标都启用了 iCloud 功能。

当我WidgetCenter.shared.reloadTimelines()从主应用程序调用小部件重新加载(添加到小部件视图的计时器设置为零)但从核心数据获取时,不会返回新添加的条目。然后我重新启动应用程序并获取正确的条目。

为什么当 WidgetCenter.shared.reloadTimelines() 被调用时它不获取正确的条目并且仅在应用程序重新启动时才起作用?

小部件的代码:

import WidgetKit
import SwiftUI
import CoreData

struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> HabitsEntry {
        HabitsEntry(date: Date(), habitsCount: 0)
    }

    func getSnapshot(in context: Context, completion: @escaping (HabitsEntry) -> ()) {
        let entry = HabitsEntry(date: Date(), habitsCount: 0)
        completion(entry)
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {        
        let managedObjectContext = Storage.viewContext
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DailyHabit")
        let predicate …
Run Code Online (Sandbox Code Playgroud)

core-data swift cloudkit widgetkit swiftui

5
推荐指数
1
解决办法
979
查看次数

标签 统计

cloudkit ×1

core-data ×1

swift ×1

swiftui ×1

widgetkit ×1