【问题标题】:Update iCloud Scheme through NSPersistentCloudKitContainer to newest Core Data Version通过 NSPersistentCloudKitContainer 更新 iCloud Scheme 到最新的 Core Data 版本
【发布时间】:2021-01-04 18:00:50
【问题描述】:

我一直在寻找将 CloudKit 方案迁移到我最新的本地核心数据模型的合适解决方案。即使推送新的更改,CloudKit 模型也不会更新。我尝试手动更新该方案,但它似乎有问题且非常耗时。 有什么建议吗?

【问题讨论】:

    标签: ios swift cloudkit nspersistentcloudkitcontainer


    【解决方案1】:

    在加载持久存储后,您是否尝试过以下操作之一?

    试试? container.initializeCloudKitSchema(options: .printSchema)

    试试? container.initializeCloudKitSchema(options: .dryRun)

    你到底改变了什么?如果您仍在开发中,您可以在 CloudKit Dashboard 中重置环境。

    【讨论】:

    • 感谢您的荣幸回答。我添加了新列,还在现有列中添加了一些关系和参数。
    • 不幸的是我无法创建映射模型。不太确定该选项移动到哪里,或者它是否已经永久消失了
    • 我已经在考虑删除 NSPersistentCloudKitContainer,因为它不支持同步到公共或共享数据库。顺便说一句,除了许多选项打印参数之外,这也被打印出来表明容器应该自己同步我猜:
    • NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1; NSPersistentCloudKitContainerOptionsKey = ""; NSPersistentHistoryTrackingKey = 1; NSPersistentStoreMirroringOptionsKey = { NSPersistentStoreMirroringDelegateOptionKey = ""; }; NSPersistentStoreRemoteChangeNotificationOptionKey = 1;
    • 您的输出看起来还不错。只要你只添加东西,迁移应该不是问题。我已经更新了好几次了。
    【解决方案2】:

    在我的情况下,问题出在一种记录类型上:

    • 在 CloudKit 中,它最初被同步为 Double

    • 我决定将它的类型更改为字符串

    对于此类错误,您会收到 Core Data 警告,但由于控制台中有许多此类消息,因此发现它并不容易。

    所以我已经删除了iCloud dashboard 中的这条记录(只有当它们没有被移动到生产环境时,你才能删除记录),然后我的新方案(带有新的记录和关系)立即使用标准命令更新:

    let options = NSPersistentCloudKitContainerSchemaInitializationOptions()
    try? container.initializeCloudKitSchema(options: options)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2021-10-16
      相关资源
      最近更新 更多