gpt4 book ai didi

ios - 生产环境中的 NSPersistentCloudKitContainer

转载 作者:行者123 更新时间:2023-12-01 15:30:07 25 4
gpt4 key购买 nike

我最近发布了一个使用 NSPersistentCloudKitContainer 的应用程序.在开发中,我的数据库按预期跨设备同步,但在生产中,我的数据库根本没有同步。调试完情况后,我意识到我必须将 iCloud 架构发布到生产环境中。但即使这样做了,我的应用程序也没有在生产中的设备之间同步。

有没有人经历过这个?我还需要为 NSPersistentCloudKitContainer 做些什么吗?在生产中工作?

最佳答案

尽管遵循了 Apple 文档中的所有步骤 NSPersistentCloudKitContainer .

为了确保您的核心数据实体都在开发环境中正确创建,在部署到生产环境之前,他们建议运行(一次).shouldInitializeSchema在您的 NSPersistentCloudKitContainer 上.

问题是,这几个月都无效(见下文...)所以另一种方法 - 以及我这样做的方式 - 是动态创建我的所有数据,保存到核心数据它通过 NSPersistentCloudKitContainer 在开发环境中创建了模式.然后,当它在我的设备上完美运行时,我将其部署到生产环境。

虽然它对我的数据运行得非常好,但它不适用于我在现实世界中使用我的 App Store 版本的任何用户。这真是令人头疼。

事实证明,我的核心数据模型的 CloudKit 架构中的一个或两个自定义类型中缺少一些自定义字段 - 我的模型中存在但我不再使用的属性(一个只是我从未使用过的空字符串)。

问题是,NSPersistentCloudKitContainer不喜欢这样,即使 NSManagedObject具有您不使用的属性,它们必须存在于 CloudKit 架构中才能正常工作。似乎需要一个自定义字段来精确匹配核心数据模型中的每个属性。

为什么它可以在我的设备上运行可能与以下事实有关在 iCloud 中。

自定义类型(如您的 CloudKit 仪表板中所见)需要具有与相应实体的每个核心数据属性相匹配的自定义字段,以及每个“一对一”关系的自定义字段(我也缺少其中一个)。都是以CD_开头的字段由 NSPersistentCloudKitContainer 自动生成.

“对多”关系似乎存储在其他地方。

在 Apple 的帮助下,他们建议运行 .shouldInitializeSchema更换initializeCloudKitSchema(options:) (尚未在他们的文档中!)在容器上(仅一次)以填补所有空白。

当我这样做时,我注意到它实际上并没有添加任何缺失的自定义字段,当我“部署到生产”时,没有需要做任何更改,虽然它仍然在我的设备上工作,但生产设备无法工作。经过进一步分析,未添加缺少的字段...

因此,相反,我确保将所有这些缺失属性和“一对一”关系的数据写入我的测试设备,然后再试一次。

我可以看到它们现在都存在于我部署到生产中的开发模式中。更改中列出了所有缺少的自定义类型和自定义字段。

现在一切都适用于我的用户!

多么复杂的过程。部分是我的错,部分是苹果的错。

关于ios - 生产环境中的 NSPersistentCloudKitContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58218874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com