在 CloudKit 的 Record Types 配置中, Metadata(元数据) 是指系统为特定记录类型(如这里的 CD_Todo)自动管理的附加信息,这些字段主要描述了记录的创建、修改和管理信息,而不是由开发者直接添加或管理的用户数据。
Metadata 字段说明#
以下是 CloudKit 中 Metadata 的常见字段及其功能描述:
| 字段名称 | 类型 | 描述 |
|---|---|---|
createdTimestamp | DATE/TIME | 记录的创建时间,由系统自动生成并维护。 |
createdUserRecordName | REFERENCE | 创建此记录的用户的 RecordName。 |
___etag | STRING | 系统生成的唯一标识记录版本的标记,用于同步和数据冲突检测(表明此记录的特定版本)。 |
modifiedTimestamp | DATE/TIME | 此记录的最后修改时间,由系统自动更新。 |
modifiedUserRecordName | REFERENCE | 最后修改此记录的用户的 RecordName。 |
recordName | REFERENCE | 记录的唯一标识符。通常由系统自动生成,也可以由开发者在存储时自定义(必须唯一)。 |
Metadata 的用途#
同步和版本控制:
___etag和时间戳(createdTimestamp/modifiedTimestamp)可用于客户端进行增量更新时的版本检查和确认,确保数据一致性。
数据追踪:
createdUserRecordName和modifiedUserRecordName提供了关于记录创建或修改的详细用户信息,便于追踪是谁操作了该记录。
记录唯一标识:
recordName是每条记录的全局唯一标识符,开发者可用它来精确检索、删除或更新某一特定条目。
时间管理:
- 时间戳(
createdTimestamp和modifiedTimestamp)可以帮助开发者组织记录按时间排序、显示最近的活动等。
- 时间戳(
与 Record Fields 的区别#
- Metadata 是 CloudKit 自动生成和管理的元数据,不能直接修改,也不能通过普通查询或存储添加到其中。
- Record Fields 是开发者为记录定义的自定义字段,用来存储业务逻辑相关的数据内容。在该示例中,
CD_completeDate,CD_content等是 Record 的实际业务字段,通过 API 读写这些字段数据。
示例:使用 Metadata 的场景#
按创建或修改时间排序: API 可通过
createdTimestamp或modifiedTimestamp排序,获取最新或最旧的记录。let query = CKQuery(recordType: "CD_Todo", predicate: NSPredicate(value: true)) query.sortDescriptors = [NSSortDescriptor(key: "modifiedTimestamp", ascending: false)]唯一标识查询: 使用
recordName检索特定记录。let recordID = CKRecord.ID(recordName: "unique_record_name") let operation = CKFetchRecordsOperation(recordIDs: [recordID])增量同步: 使用
___etag或时间戳检查记录版本,确保客户端与服务器保持最新一致。
总结#
Metadata 是 CloudKit 自动为每个 Record Type 提供的系统元数据,用于描述和管理记录的生命周期和相关上下文信息,主要作用是同步控制、时间戳管理和版本追踪,开发者可以查询并读取它们,但不能直接修改它们。这使得 CloudKit 能够更加安全、高效地管理数据的增量更新和版本一致性控制。