如何在 Cloudkit 上创建此 data/model 以在我的应用程序中显示它?

How do I create this data/model on Cloudkit to display it in my app?

对 Cloudkit 相当陌生,我一直在弄清楚如何为我的数据建模。下面我给出了一个类似于我的模型的小代码示例。

struct Street {
    var house: [Home]
}

struct Home {
    var people: [Person]
    var houseNumber: Int
}
struct Person {
    var firstName: String
    var lastName: String
    var age: Int
}

我想将此数据存储在云端,然后获取要在我的应用程序上显示的数据。问题是我不确定如何存储数据。

我如何存储它以便将所有数据link整合在一起?

如果我有一条包含姓名字段的街道记录,我如何才能 link 将姓名与人的年龄相匹配?我需要存储 3 条不同的记录吗?如果是这样,我将如何 link 将记录放在一起?

我假设你必须使用引用,但我不确定如何去做。

我希望我能清楚地解释我想做的事情。

对于初学者,请查看 Apple 的 CloudKit Quick Start documentation。它将详细介绍我将要说的所有内容,我强烈建议您阅读它。

与您在代码中建模的 struct 非常相似,您将在名为 CloudKit Dashboard 的 Web 门户中创建类似的对象。在将 iCloud 授权正确添加到您的应用程序 ID 后,您将可以使用此门户网站。

在边栏中,您会看到 "Record Types"。这是您可以在不需要任何代码的情况下创建对象的地方。快速入门指南提供了有关如何创建对象(也称为 "record type")的详细信息。 (该对象的实例将称为记录。)基本上,您将需要创建与对象的原始属性相对应的字段,但通常不要编辑放置在记录名称字段中的唯一标识符。例如,您的 Person 记录类型可能包含字段 firstName(类型 String)、lastName(类型 String)和年龄(类型 Int).

您的 Home 记录类型可能有一个 houseNumber 字段,类型为 Int

CloudKit 处理关系的方式与 Core Data 等本地存储解决方案略有不同。出于效率原因,我们真的不希望对象包含一组关联对象,因为获取 Street,然后需要获取每个 House ID,然后获取每个 Person ID在House.

因此,我们没有在 Street 上放置一个 House 对象数组,而是在 Street 上放置一个 Reference 类型的字段(到 House) =]记录类型。

因此,使用这种新的记录类型模型,您将在 CloudKit 仪表板中设置,然后您可以在代码中创建 CKRecord 对象并设置与字段对应的属性。告诉 CKRecord 代表 House 里面住着哪些人,可以通过在每个 CKRecord 代表里面的人设置 house 属性 来完成房子。

例如,您可以使用 CKQuery 获取房子,然后通过为记录 ID 对应的所有 "People" 对象创建 CKQuery 来获取人他们 house 参考字段中的房屋对象。

请参阅 CloudKit 快速入门指南中的 Adding Reference Fields

编辑:在 CloudKit 仪表板中设置引用字段的值时,该值将是您引用的记录的唯一 ID 名称。