我使用Core数据编写了本地数据模型。它是面向对象的,所以在我的核心数据模型中有这样的东西:
class Pair {
var uuid: NSUUID
var me: Person
var friend: Person
}
class Person {
var name: String
var birthday: NSDate
var address: Address
}
class Address {
var streetNumber: Int16
var streetName: String
var zip: Int16
}现在在CloudKit中,我意识到如果我想得到一个“对”和它的所有数据,然后生成"Person“和"Address”CKReference,那么我就必须获取"Person“和"Address”,这是两个额外的网络调用和大量逻辑来异步处理它们的结果。因此,我在考虑“去角色化”这个数据,并将其全部放入CloudKit模式中的“对”CloudKit中,而不需要任何CKReference。
class CloudKitPair {
var uuid: NSUUID
var myName: String
var myBirthday: NSDate
var myStreetNumber: Int16
var myStreetName: String
var myZip: Int16
var friendName: String
var friendBirthday: NSDate
var friendStreetNumber: Int16
var friendStreetName: String
var friendZip: Int16
}以这种方式设计我的CloudKit模式以避免对CKReferences进行额外的网络获取调用是合法的吗?
发布于 2016-11-18 02:23:01
以这种方式设计我的CloudKit模式以避免对CKReferences进行额外的网络获取调用是合法的吗?
我会说答案是肯定的,这是一个合法的设计。
请注意,您所做的权衡是优先考虑有效的网络调用而不是高效地使用iCloud数据库空间。
您建议的设计将使您存储相同的信息不止一次。根据您的用例,这可能会比理想的多很多次:
例如:
Person A <-对具有-> Person BPerson A <-对具有-> Person CPerson A <-对具有-> Person D如果本系列更进一步,那么您将多次将Person A存储在数据库中,这可能被认为是对空间的极大浪费。另一方面,对于您打算如何使用这些数据,这可能是完全合理的。
我建议对用例进行建模,并根据苹果为iCloud提供的使用限制对它们进行度量。
https://stackoverflow.com/questions/40499157
复制相似问题