CloudKit — Metadata(Record Types)

在 CloudKit 的 Record Types 配置中, Metadata(元数据) 是指系统为特定记录类型(如这里的 CD_Todo)自动管理的附加信息,这些字段主要描述了记录的创建、修改和管理信息,而不是由开发者直接添加或管理的用户数据。


Metadata 字段说明 #

以下是 CloudKit 中 Metadata 的常见字段及其功能描述:

字段名称类型描述
createdTimestampDATE/TIME记录的创建时间,由系统自动生成并维护。
createdUserRecordNameREFERENCE创建此记录的用户的 RecordName
___etagSTRING系统生成的唯一标识记录版本的标记,用于同步和数据冲突检测(表明此记录的特定版本)。
modifiedTimestampDATE/TIME此记录的最后修改时间,由系统自动更新。
modifiedUserRecordNameREFERENCE最后修改此记录的用户的 RecordName
recordNameREFERENCE记录的唯一标识符。通常由系统自动生成,也可以由开发者在存储时自定义(必须唯一)。

Metadata 的用途 #

  1. 同步和版本控制

    • ___etag 和时间戳(createdTimestamp / modifiedTimestamp)可用于客户端进行增量更新时的版本检查和确认,确保数据一致性。
  2. 数据追踪

    • createdUserRecordNamemodifiedUserRecordName 提供了关于记录创建或修改的详细用户信息,便于追踪是谁操作了该记录。
  3. 记录唯一标识

    • recordName 是每条记录的全局唯一标识符,开发者可用它来精确检索、删除或更新某一特定条目。
  4. 时间管理

    • 时间戳(createdTimestampmodifiedTimestamp)可以帮助开发者组织记录按时间排序、显示最近的活动等。

与 Record Fields 的区别 #

  • Metadata 是 CloudKit 自动生成和管理的元数据,不能直接修改,也不能通过普通查询或存储添加到其中。
  • Record Fields 是开发者为记录定义的自定义字段,用来存储业务逻辑相关的数据内容。在该示例中,CD_completeDate, CD_content 等是 Record 的实际业务字段,通过 API 读写这些字段数据。

示例:使用 Metadata 的场景 #

  1. 按创建或修改时间排序: API 可通过 createdTimestampmodifiedTimestamp 排序,获取最新或最旧的记录。

    let query = CKQuery(recordType: "CD_Todo", predicate: NSPredicate(value: true))
    query.sortDescriptors = [NSSortDescriptor(key: "modifiedTimestamp", ascending: false)]
    
  2. 唯一标识查询: 使用 recordName 检索特定记录。

    let recordID = CKRecord.ID(recordName: "unique_record_name")
    let operation = CKFetchRecordsOperation(recordIDs: [recordID])
    
  3. 增量同步: 使用 ___etag 或时间戳检查记录版本,确保客户端与服务器保持最新一致。


总结 #

Metadata 是 CloudKit 自动为每个 Record Type 提供的系统元数据,用于描述和管理记录的生命周期和相关上下文信息,主要作用是同步控制、时间戳管理和版本追踪,开发者可以查询并读取它们,但不能直接修改它们。这使得 CloudKit 能够更加安全、高效地管理数据的增量更新和版本一致性控制。

本文共 911 字,上次修改于 Jan 1, 2025