无法初始化 CloudKit 架构,因为协调器中没有存储配置为使用 CloudKit

Posted

技术标签:

【中文标题】无法初始化 CloudKit 架构,因为协调器中没有存储配置为使用 CloudKit【英文标题】:Couldn't initialize CloudKit schema because no stores in the coordinator are configured to use CloudKit 【发布时间】:2021-03-02 05:55:52 【问题描述】:

我在尝试初始化 Cloudkit schema 时遇到此错误:

Error Domain=NSCocoaErrorDomain Code=134060 "A Core Data error occurred." UserInfo=NSLocalizedFailureReason=Couldn't initialize CloudKit schema because no stores in the coordinator are configured to use CloudKit: ()

这是我的代码:

private lazy var persistentContainer: NSPersistentContainer = 
        let container = NSPersistentCloudKitContainer(name: self.objectModelName)
        
        // Create a store description for a CloudKit-backed local store
        let cloudStoreLocation = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("iCloud.sqlite")
        let cloudStoreDescription = NSPersistentStoreDescription(url: cloudStoreLocation)
        cloudStoreDescription.configuration = "iCloud"

        // Set the container options on the cloud store
        cloudStoreDescription.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.myname.app")
        
        // Update the container's list of store descriptions
        container.persistentStoreDescriptions = [
            cloudStoreDescription
        ]
        
        do 
            try container.initializeCloudKitSchema()
         catch 
            print(error)
        
        container.loadPersistentStores(completionHandler:  (storeDescription, error) in
            if let error = error as NSError? 
                fatalError("Unresolved error \(error), \(error.userInfo)")
            
        )
        return container
    ()

这是我的:project configuration

这是我的:data model schema

谁能帮我找出我做错了什么?

谢谢!

【问题讨论】:

【参考方案1】:

看在上帝的份上,我只需要使用我的 AppleID 登录 iPhone 的“设置”,并在同一设备上的Settings > My Name > iCloud 中启用 iCloud Drive。

Apple 的开发者文档教程中并未明确提及这一点。

【讨论】:

【参考方案2】:

以后可能会遇到这个问题。我遇到了同样的错误,问题与上面的示例代码相同。

我打过电话

container.initializeCloudKitSchema()

打电话之前

container.loadPersistentStores

您需要在调用 container.loadPersistentStores 之后调用 container.initializeCloudKitSchema

【讨论】:

以上是关于无法初始化 CloudKit 架构,因为协调器中没有存储配置为使用 CloudKit的主要内容,如果未能解决你的问题,请参考以下文章

无法共享 CloudKit CKShare 记录

将已删除的 CKRecord 与 CoreData NSManagedObject 协调一致

在 Cloudkit 中创建 CKRecord?

CloudKit 架构设计

swift Swift - CloudKit - 部署架构

使用 NSPersistentCloudKitContainer 时,CoreData 架构更改未部署到 CloudKit