如何解决Core Data 和 Cloudkit Synch 不一致
我有一个使用 Core Data 和 Cloudkit 使用公共数据库的应用程序。问题是删除似乎永远不会同步,添加和更改直到应用进入后台然后返回前台才会显示,甚至这些结果也不一致。
示例应用程序只是您在指定 SwiftUI 和 Core Data 时获得的默认应用程序。我修改了 CloudKit 仪表板中的 Schema 以添加两个索引 recordName 和 modifiedAt。
下面是 Persistence.swift 文件,所以要重现,新建一个项目,选择 Core Data 和 Use CloudKit,添加 Capability for CloudKit 和 Remote Notifications,然后将 Persistence.swift 内容替换为上面的内容。
import CoreData
struct PersistenceController {
static let shared = PersistenceController()
static var preview: PersistenceController = {
let result = PersistenceController(inMemory: true)
let viewContext = result.container.viewContext
for _ in 0..<10 {
let newItem = Item(context: viewContext)
newItem.timestamp = Date()
}
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError),\(nsError.userInfo)")
}
return result
}()
let container: NSPersistentCloudKitContainer
init(inMemory: Bool = false) {
container = NSPersistentCloudKitContainer(name: "TestCKSink")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
guard let description = container.persistentStoreDescriptions.first else
{
fatalError()
}
//description.setOption(true as NSNumber,forKey: NSPersistentHistoryTrackingKey)
description.setOption(true as NSNumber,forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
description.cloudKitContainerOptions?.databaseScope = .public
container.viewContext.transactionAuthor = "Me"
container.viewContext.automaticallyMergesChangesFromParent = true
container.viewContext.mergePolicy = NSMergeByPropertyStoreTrumpMergePolicy
container.loadPersistentStores(completionHandler: { (storeDescription,error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error),\(error.userInfo)")
}
})
}
}
无论是否打开历史跟踪选项,我都试过了。正如我所说,这在某些时候有效。我也意识到我需要添加代码来强制刷新显示,但即使检查 CloudKit 仪表板并查询记录,有些根本不显示或需要很长时间才能到达(18 分钟)。>
欢迎提出任何建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。