我有一个充分开发的应用程序使用核心数据。现在它已经完成了,我想添加CloudKit同步(就像我对其他应用程序所做的那样)。但是,当我尝试这样做时,loadPersistentStores函数无法加载CloudKit持久存储。
我增加了CloudKit功能和后台模式远程通知。

标识符在开发人员站点上注册:

我有一个用于数据函数的单例CoreDataManager类,它可以很好地与本地存储一起工作:
class CoreDataManager: ObservableObject {
static let instance = CoreDataManager()
@Published var pubSortOrder: String = "lastName"
//bunch more
//let container: NSPersistentContainer
let container: NSPersistentCloudKitContainer
let context: NSManagedObjectContext
private init() {
//container = NSPersistentContainer(name: "ResLogCloud")
container = NSPersistentCloudKitContainer(name: "ResLogCloud")
container.loadPersistentStores { (description, error) in
if let error = error {
print("Error loading Core Data. \(error.localizedDescription)")
}
}
context = container.viewContext
//uncomment next for CloudKit container
context.automaticallyMergesChangesFromParent = true
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
}//init
//bunch of functions dealing with data
}//class只是为了好玩,我已经在CloudKit仪表板上重置了几次环境。
控制台错误只表示“加载核心数据时出错。发生了核心数据错误”。显然,这不是很有帮助。
我没有主意了。如有任何指导,将不胜感激。Xcode 13.2.1 iOS 15。
发布于 2022-01-14 00:19:45
这太奇怪了。我发现我将一个Core数据属性标记为非可选属性,但我没有提供默认值。一旦我提供了默认值,CloudKit存储就像预期的那样工作。正如您所预期的,找到这一点是一个相当复杂的调试过程。
有一些启动代码可以用来查找额外的核心数据调试信息--在这种情况下,我没有找到一个来帮助我,尽管我相信有一个。对于其他人,你可以从这里开始:
https://developer.apple.com/documentation/coredata/accessing_data_when_the_store_changes
同样,本地持久存储似乎并不关心这个非可选值,但持久性CloudKit存储却关心这个值。
https://stackoverflow.com/questions/70690823
复制相似问题