共享的CoreData容器仅在添加/删除时更新,而在编辑时不更新

问题描述

我的应用程序和小部件之间有一个共享的Core Data容器。从核心数据添加/删除项目会立即反映在我的CoreDataManager类中,该小部件使用该类从核心数据中获取项目。但是,当我更改已经存储在CD中的任何数据上的任何属性时,直到我从Xcode重新启动应用程序,该更改都不会反映出来。

struct PersistenceController  {
    static let shared = PersistenceController()

    let container: NSPersistentContainer

    init(inMemory: Bool = false) {
        container = NSPersistentContainer(name: "container")
        let storeURL = URL.storeURL(for: "group.container",databaseName: "shared-db")
        let storeDescription = NSPersistentStoreDescription(url: storeURL)
        container.persistentStoreDescriptions = [storeDescription]
        container.loadPersistentStores(completionHandler: { (storeDescription,error) in
            if let error = error as NSError? {
                print("Unresolved error \(error),\(error.userInfo)")
            }
        })
    }
}

class CoreDataManager {
    var items: [Item] = []

    func fetchUpdatedResults(completion: @escaping ([Item]) -> Void) {
        let container = PersistenceController.shared.container
        let fetchRequest = NSFetchRequest<Item>(entityName: "Item")
        fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \Item.checked,ascending: true),NSSortDescriptor(keyPath: \Item.timestamp,ascending: false)]
        do {
            items = try container.viewContext.fetch(fetchRequest)
            
            // This does NOT change when user edits an exiting object in CD
            // BUT CHANGES when user adds or deletes an object

            print("\(items)")


            completion(items)
        } catch {
            print("Failed to Fetch: \(error)")
        }
    }
}

fetchUpdatedResults定义了一个完成处理程序,以模仿Apple实际上建议如何在WidgetKit的getTimeline中进行异步调用。我在这里想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)