问题描述
我的应用程序和小部件之间有一个共享的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 (将#修改为@)