如何解决使用 CloudKit + CoreData,如何在没有 SwiftUI 的 @FetchRequest 的情况下从远程云更新更新 UI?
大多数 CloudKit+CoreData 教程使用 SwiftUI,它们的实现包括 @FetchRequest,它会自动检测 CoreData 提取中的变化并刷新 UI。
https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-fetchrequest-property-wrapper
如果没有 SwiftUI,我将如何实现这一目标?我希望能够控制刷新 UI 的方式,以响应检测到由于 iCloud 更新而更改的 CoreData。
我有这个来设置 NSPersistentCloudKitContainer 并注册远程通知:
let storeDescription = NSPersistentStoreDescription()
storeDescription.setOption(true as NSNumber,forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
let container = NSPersistentCloudKitContainer(name: "CoreDataDemo")
container.persistentStoreDescriptions = [storeDescription]
container.loadPersistentStores(completionHandler: { (storeDescription,error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error),\(error.userInfo)")
}
})
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
NotificationCenter.default.addObserver(self,selector: #selector(didReceiveCloudUpdate),name: .NSPersistentStoreRemoteChange,object: container.persistentStoreCoordinator)
但是我不知道如何处理 .NSPersistentStoreRemoteChange 与 SwiftUI 实现自动执行的方式相同。该方法会被许多不同的线程频繁调用(仅在启动时就调用了很多次)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。