在 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 能够更加安全、高效地管理数据的增量更新和版本一致性控制。