Record Types Record Type是开发人员为CKRecord指定的类型标识符。你可以直接在代码中创建它,也可以在CloudKit仪表盘上对其进行创建、修改。...image-20210809143010363 对于私有数据库中的数据,在创建CKRecord时可以为数据指定Zone。...你也可以在代码中获取到Core Data托管对象对应的CKRecord: func getLastUserID(_ object:Item?) -> CKRecord.ID?...(for: item.objectID) else {return nil} guard let userID = ckRecord.lastModifiedUserRecordID else {...print("can't get userID") return nil } return userID} 上面的代码,将获取托管对象记录对应的CKRecord
除了直接在iCloud控制台创建Schema的内容外,也可以通过在代码中创建CKRecord,让CloudKit自动为我们创建或更新Schema中对应的内容。...在CloudKit上,每条记录被称作为CKRecord。...作为CKRecord的唯一标识,CKRecordIdentifier被用于确定该CKRecord在数据库的唯一位置。...如果数据保存在自定义的CKRecordZone,我们也需要在CKRecord.ID中指明。...比如对于新增数据,将NSManagedObject实例转换成CKRecord实例。
在绝大多数的情况下,开发者在使用托管对象时可以完全不考虑私有数据库以及CKRecord的存在。 将公共数据库同步到本地,则完全不同。公共数据库是网络数据库概念。...标准逻辑为开发者在CloudKit仪表台上创建Record Type,通过仪表台或客户端向公共数据库添加CKRecord记录,客户端通过访问服务器获取网络数据记录。...同步到本地的数据,是服务器端公共数据库的镜像,在本地通过对托管对象数据的操作间接完成对服务器端CKRecord记录的操作。...Core Data with CloudKit通过在本地备份CKRecord的元数据的方式,完美解决了鉴权效率问题,并提供了便捷API供开发者调用。...尽管Core Data with CloudKit在本地保存了托管对象对应的CKRecord元数据,但没有给开发者提供API。
云端共享机制 在WWDC 2021之前,CloudKit的机制是通过一个rootRecord来实现共享,所有者为某个CKRecord创建CKShare,实现单个记录(包含它的关系数据)共享。...let user = CKRecord(recordType:"User")let share = CKShare(rootRecord: user) WWDC 2021中CloudKit提供了一种新的共享机制...shareDescOption.databaseScope = .shared 由于所有的共享数据都是需要对应的CKRecord信息,因此,本地私有数据库必须同时支持网络同步。...网络端和本地端数据保存逻辑如下: 共享数据库示意图.drawio-2 与同步公共数据库一样,Core Data with CloudKit为了缩短通过网络查询CloudKit数据时间,将NSManagedObject对应的CKRecord
CKRecord —— 代表 Database 里面一条结构化记录,是键值对的封装,所以可以存储任何数据。...与 Parse 等提供的子类化数据模型不一样,CloudKit 中所有存储的数据只能是 CKRecord 类型,开发者需要使用一个名叫 Record Type 的字符串来区分不同类型的数据。...CKRecord 中某一个属性的值,可以是另一个 CKRecord(譬如 Instagram 中的每张图片,都有一个作者字段),这时候属性值就可以是 CKReference 类型。
CKRecord: 即数据库中的一条数据记录。CloudKit 使用 record 通过 k/v 结构来存储结构化数据。
CloudKit 私有域信息、上次同步时间、上次同步令牌、导出操作日志、导入操作日志、待导出数据、Core Data 关系与 CloudKit 关系对照表、本地数据对应的 CKRecordName、本地数据的 CKRecord
Core Data with CloudKit 为了突破 CloudKit API 中对于关系数量( CKRecord.Reference 不能超过 750 个 )的限制,采用了双向关联的方式。
领取专属 10元无门槛券
手把手带您无忧上云