Jak*_*ake 6 ios nspersistentcloudkitcontainer
我最近发布了一个使用NSPersistentCloudKitContainer. 在开发中,我的数据库按预期跨设备同步,但在生产中,我的数据库根本不同步。一旦我调试了这种情况,我意识到我必须将 iCloud Schema 发布到生产环境中。但即使这样做,我的应用程序也没有在生产中跨设备同步。
有没有人经历过这个?我还需要做些什么NSPersistentCloudKitContainer才能在生产中工作吗?
Pau*_*tin 16
尽管遵循 Apple 文档中的所有步骤,但我认为已经解决了发生了什么,因为我遇到了同样的问题 NSPersistentCloudKitContainer.
为了确保您的 Core Data 实体都在开发环境中正确创建,在部署到生产环境之前,他们建议.shouldInitializeSchema在您的NSPersistentCloudKitContainer.
问题是,这几个月都无效(请参阅下面的更多内容......)所以另一种方法 - 以及我这样做的方式 - 是即时创建我的所有数据,保存到核心数据它通过NSPersistentCloudKitContainer. 然后,当它在我的设备上完美运行时,我将其部署到生产环境中。
虽然它对我的数据运行得非常好,但它不适用于现实世界中使用我的 App Store 版本的应用程序的任何用户。这真是令人头疼。
事实证明,我的核心数据模型的 CloudKit 模式中的一两个自定义类型中缺少一些自定义字段 - 我的模型中存在但我不再使用的属性(一个只是我从未使用过的空字符串)。
问题是,NSPersistentCloudKitContainer不喜欢这样,即使NSManagedObject有你不使用的属性,它们也必须存在于 CloudKit Schema 中才能工作。似乎需要一个自定义字段来精确匹配 Core Data 模型中的每个属性。
为什么它在我的设备上工作可能与这样一个事实有关:在过去的某个时候,这些自定义类型和自定义字段在重置之前都存在于开发环境中,到那个阶段我的设备已经为它们准备好了一切在 iCloud 中。
自定义类型(如您的 CloudKit 仪表板中所示)需要具有与相应实体的每个核心数据属性匹配的自定义字段,以及每个“一对一”关系的自定义字段(我也缺少其中一个)。它们都是以CD_自动生成的字段开头NSPersistentCloudKitContainer。
“对多”关系似乎存储在别处。
在 Apple 的帮助下,他们建议在容器上运行.shouldInitializeSchema替换initializeCloudKitSchema(options:)(尚未在他们的文档中!)(仅一次)以填补所有空白。
当我这样做时,我注意到它实际上根本没有添加任何缺失的自定义字段,当我“部署到生产”时,没有任何更改,虽然它仍然在我的设备上工作,但生产设备却没有工作。在进一步分析中,未添加缺失的字段...
因此,相反,我确保将所有这些缺失的属性和“一对一”关系的一些数据写入我的测试设备,然后再试一次。
我可以看到它们现在都出现在我部署到生产的开发模式中。更改中列出了所有缺少的自定义类型和自定义字段。
现在一切都适用于我的用户!
多么复杂的过程。部分是我的错,部分是苹果的错。
| 归档时间: |
|
| 查看次数: |
1512 次 |
| 最近记录: |