我正在执行任务管理器应用程序的最后一步:让任务在设备之间同步。但是,我收到错误“此 NSPercientStoreCoordinator 没有持久存储(未知)。它无法执行保存操作。”这个错误到底意味着什么?我的容器已初始化,因此它应该有一个持久存储,对吧?我确信我还启用了所有正确的功能。这是我的数据控制器的代码:
import CoreData
import Foundation
class DataController: ObservableObject {
let container = NSPersistentCloudKitContainer(name: "TaskDataModel")
init() {
guard let description = container.persistentStoreDescriptions.first else {
fatalError("Container descriptions not loaded")
}
description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
container.viewContext.automaticallyMergesChangesFromParent = true
container.loadPersistentStores { description, error in
if let error = error {
print("Core Data failed to load: \(error.localizedDescription)")
}
}
}
}
这是 TaskManMain:
@main
struct TaskManApp: App {
@StateObject private var dataController = DataController()
var body: some Scene {
WindowGroup {
MainView()
.environment(\.managedObjectContext, dataController.container.viewContext)
}
}
}
如果大家有兴趣,这里是完整的存储库: https://github.com/aabagdi/TaskMan
我不知道你是否有和我一样的问题,但我设法通过更好的错误处理找到了我的确切问题。
class DataController: ObservableObject {
let container: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "TaskDataModel")
container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
container.viewContext.automaticallyMergesChangesFromParent = true
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
}
这给了我破坏我的代码的确切错误。在我的情况下,我对我的实体之一有自定义约束,并且您不能将唯一约束与 NSPersistentCloudKitContainer 一起使用。 我终于设法通过创建一个函数找到了解决方法。 希望有帮助!