CloudKit 命名空间

CloudKit 命名空间提供对 iCloud 的访问权限。

CKAcceptSharesOperation

实现接受共享记录的操作。

CKAsset

与 对象关联的 CKRecord 大型文件。

CKContainer

封装与应用关联的内容,包括共享和每用户专用数据。

CKContainer.Notifications

CKContainer 发布的通知。

CKDatabase

包含 中的数据 CKContainer。 公共 CKDatabase 提供共享数据,专用数据库保存当前用户的数据。

CKDatabaseNotification

有关数据库活动的通知。

CKDatabaseOperation

CKDatabase操作的抽象类。

CKDatabaseSubscription

数据库订阅。

CKDiscoverAllContactsOperation

一个 , CKOperation 用于检索应用用户的所有可发现联系人的 ID。

CKDiscoverAllUserIdentitiesOperation

获取系统通讯簿中所有可发现用户的操作。

CKDiscoveredUserInfo

有关用户的信息。 由 CKDiscoverAllContactsOperation返回。

CKDiscoverUserIdentitiesOperation

查找与条件匹配的用户的操作。

CKDiscoverUserInfosOperation

一个 , CKOperation 用于检索应用开发人员已经知道其电子邮件地址或记录 ID 的可发现用户的 ID。

CKErrorCodeExtensions

CloudKit.CKErrorCode 枚举的扩展方法。

CKErrorFields

保留 CloudKit 使用的错误常量。

CKFetchDatabaseChangesOperation

提取数据库更改的操作。

CKFetchNotificationChangesOperation

一个 CKOperation 该 ret./../summary_set.sh CKFetchNotificationChangesOperation A

CKFetchRecordChangesOperation

一个 CKDatabaseOperation ,用于检索有关已更改或删除 CKRecord 对象的数据。

CKFetchRecordsOperation

检索 CKDatabaseOperation 特定 CKRecord 对象的 。

CKFetchRecordZoneChangesConfiguration

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchRecordZoneChangesOperation

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchRecordZoneChangesOptions

包含控制如何提取记录区域更改的选项。

CKFetchRecordZonesOperation

CKDatabaseOperation iCloud 检索 CKRecordZone 对象的 。

CKFetchShareMetadataOperation

提取多个共享的共享元数据的操作。

CKFetchShareParticipantsOperation

提取共享记录的共享参与者的操作。

CKFetchSubscriptionsOperation

CKDatabaseOperation iCloud 检索 CKSubscription 对象的 。

CKFetchWebAuthTokenOperation

从 CloudKit 仪表板返回指定 API 令牌的 Web 身份验证令牌的操作。

CKLocationSortDescriptor

根据记录与指定位置的距离对记录进行排序。

CKMarkNotificationsReadOperation

将推送通知标记为已读。 通常由使用推送通知来跟踪更改的应用使用。

CKModifyBadgeOperation

一个 CKOperation ,用于修改当前设备或所有用户设备上的应用图标的锁屏提醒。

CKModifyRecordsOperation

CKDatabaseOperation 更改提交到一个或多个 CKRecord 对象的 。

CKModifyRecordZonesOperation

一个 CKDatabaseOperation ,用于提交对记录区域的更改。

CKModifySubscriptionsOperation

CKDatabaseOperation 更改提交到一个或多个 CKSubscription 对象的 。

CKNotification

发送到应用的推送通知。

CKNotificationID

唯一标识从容器发送的推送通知。

CKNotificationInfo

指定在满足触发条件时生成的推送通知的类型。

CKOperation

针对 CloudKit 数据库执行的操作的抽象基类。

CKOperationConfiguration

配置 CloudKit 操作的行为。

CKOperationGroup

表示一组批量的 CloudKit 操作。

CKQuery

指定针对 CloudKit 数据库的查询。

CKQueryCursor

保留 的结果集中的 CKQuery当前停止点。

CKQueryNotification

CKSubscription 对象生成的推送通知。

CKQueryOperation

执行 CKDatabaseOperationCKQuery

CKQuerySubscription

允许开发人员基于查询创建通知。

CKRecord

在 CloudKit 中构建数据的Key-Value对字典。

CKRecordID

唯一标识 CKRecord 数据库中的 。

CKRecordValue

应用开发人员不应将此接口子类化,该接口为存储在 CloudKit 数据库中的对象提供强类型。 不支持自定义数据类型。

CKRecordZone

允许组织相关 CKRecord 对象。 默认情况下,专用数据库和公共数据库都有一个区域。

CKRecordZoneID

唯一标识 CKRecordZone 数据库中的 。

CKRecordZoneNotification

由于 中的 CKRecordZone更改而生成的推送通知。

CKRecordZoneSubscription

用于记录区域更改的订阅。

CKReference

定义单个 CKRecordZone中的对象之间的 CKRecord 1:M 关系。

CKServerChangeToken

一个只读对象,用于标识 的 CKRecord某个版本。 提取更新的数据时,传递现有令牌允许服务器仅返回更改,从而提高效率。

CKShare

表示共享记录。

CKShareKeys

各种 CloudKit 类使用的常量。

CKShareMetadata

表示共享记录共享元数据。

CKShareParticipant

包含共享参与者的数据。

CKSubscription

跟踪服务器上更改的持久查询。 (请参阅CKQueryNotification.)

CKUserIdentity

包含用于查找一个或多个用户的信息。

CKUserIdentityLookupInfo

包含可用于查找用户的数据。

接口

ICKRecordValue

表示所需方法的接口 ((如果协议 CKRecordValue有任何) )。

枚举

CKAccountStatus

枚举指示用户的 iCloud 帐户是否可用的值。

CKApplicationPermissions

枚举一个值,该值指示其他应用用户可以通过电子邮件地址发现当前用户。

CKApplicationPermissionStatus

枚举应用程序在尝试获取权限时可能具有的状态。

CKDatabaseScope

枚举值,该值指示数据库是专用的、共享的还是公共的。

CKErrorCode

枚举 CloudKit 错误条件。

CKNotificationType

枚举可以生成推送通知的事件。

CKOperationGroupTransferSize

CloudKit 命名空间提供对 iCloud 的访问权限。

CKQueryNotificationReason

枚举可以触发数据生命周期通知的持久性存储事件。

CKQuerySubscriptionOptions

枚举触发通知的时间 CKSubscription

CKRecordSavePolicy

枚举控制何时或是否应保存记录的策略。

CKRecordZoneCapabilities

枚举区域能够执行的特殊操作。

CKReferenceAction

枚举值,这些值控制引用在删除其目标记录时是否应删除自身。

CKShareParticipantAcceptanceStatus

枚举共享参与请求的响应。

CKShareParticipantPermission

枚举用户共享权限。

CKShareParticipantRole

CloudKit 命名空间提供对 iCloud 的访问权限。

CKShareParticipantType

枚举共享参与者类型。

CKSubscriptionOptions

枚举用于控制基于查询的订阅的推送通知行为的标志。

CKSubscriptionType

枚举订阅类型。

委托

CKAcceptPerShareCompletionHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKDatabaseDeleteSubscriptionHandler

方法的 DeleteSubscription(String, CKDatabaseDeleteSubscriptionHandler) 完成处理程序。

CKDiscoverUserInfosCompletionHandler

应用程序开发人员可以实现此 delgate 并将其分配给 M:CloudKit.CKDiscoverUserInfosOperation.Complete* 属性,以处理返回的用户信息。

CKFetchDatabaseChangesCompletionHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchPerShareMetadataHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchRecordChangesHandler

属性的 AllChangesReported 委托。

CKFetchRecordsCompletedHandler

属性的 Completed 委托。

CKFetchRecordZoneChangesFetchCompletedHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchRecordZoneChangesTokensUpdatedHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchRecordZoneChangesWithIDWasDeletedHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKFetchSubscriptionsCompleteHandler

属性的 Completed 委托。

CKFetchWebAuthTokenOperationHandler

CloudKit 命名空间提供对 iCloud 的访问权限。

CKMarkNotificationsReadHandler

属性的 Completed 委托。

CKModifyRecordsOperationHandler

属性的 Completed 委托。

CKModifyRecordZonesHandler

属性的 Completed 委托。

CKModifySubscriptionsHandler

属性的 Completed 委托。

CKRecordZoneCompleteHandler

属性的 Completed 委托。

注解

CloudKit 命名空间允许应用程序开发人员控制其应用程序和 iCloud 之间的数据流。 iCloud 提供服务器端数据存储,既在应用程序或特定应用程序的所有实例之间共享的“公共”,也提供单个用户独有的“专用”存储。 iCloud 存储和传输在 Apple 设备之间加密和同步。 CloudKit 不提供客户端持久性或数据缓存 - CloudKit 功能仅在用户具有活动的 Internet 连接时可用。

CloudKit 中最高级别的类是 CKContainer。 CloudKit 容器 (有时在 Apple 文档中称为“Ubiquity 容器”) 是使用特定名称标识的信息存储。 Apple 建议使用“iCloud”格式的名称。{reverse DNS}。{appName}“,例如”iCloud.com.mycompany.MyApp”。 开发人员必须使用 iCloud 仪表板创建和配置其容器,该仪表板可通过 Apple 开发人员门户获取。

单个 CKContainer 可以包含公共数据(在应用的所有实例之间共享 (查看 PublicCloudDatabase) )和私有数据(包含用户特定的数据 (查看 PrivateCloudDatabase) )。 在 iCloud 中,公共数据存储在应用的 iCloud 存储中,而专用数据存储在用户的专用 iCloud 存储中。 该应用的所有已连接用户(无论是否已登录到 iCloud)均可供公众 CKDatabase 使用。 仅当用户登录到 iCloud 时,才为专用 CKDatabase 。 开发人员必须编写其代码,以便对用户的登录或连接状态更改做出正常反应。

这些公共和私有 CKDatabase 对象存储结构化记录。 这些由 CKRecord 对象表示。 除了类似于字段的键值数据之外,这些记录还可以保存 CKAsset 大型对象,这些对象可以直接 (包含 CKRecord) 检索,也可以作为引用 (允许延迟检索大型数据) 。

所有 CKRecord 实例都存储在 中 CKRecordZoneCKRecordZone与传统的数据库实例类似:它可以包含多个CKRecord存储,这些存储可以相互引用,但不能引用其他CKRecordZone实例中的存储,对象CKRecordZone可用于跨多个CKRecord存储协调原子操作。 与数据库实例的相似性不是通用的;例如,开发人员可以使用 M:CKDatabase.FetchRecordAsync (CKRecordID) 直接从 CKDatabase 中检索 CKRecord ,而无需引用区域。 默认值 CKRecordZone 通过 P:CloudKit.CKRecordZone.DefaultRecordZone () 提供。 开发人员可以使用 CloudKit 仪表板创建其他区域,并使用它们以逻辑方式对数据进行分区。

CloudKit 应用需要具有 com.apple.developer.icloud-services 权利和特定于应用的捆绑标识符 (预配配置文件,例如“com.mycompany.CloudKitApp”) 。 开发人员必须创建和配置此类预配配置文件。

下面演示了处理单个记录的 CloudKit 的一些典型用法:

//Create 
private async Task<CKRecord> StoreInCloudKit (string name, CLLocation loc, int stationId)
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;
    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    var recordType = "StationReferences";

    var record = new CKRecord (recordType);
    record ["Name"] = new NSString (name);
    record ["Position"] = loc;
    record ["StationID"] = new NSNumber (stationId);

    var storedRecord = await publicDatabase.SaveRecordAsync (record);
    return storedRecord;
}

//Retrieve (via ID)
private async Task<CKRecord> AccessCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var recordNameIHappenToKnow = "7eaf0432-2fa4-475f-851a-c6a19b3f8587";
    var recordId = new CKRecordID (recordNameIHappenToKnow);
    var record = await publicDatabase.FetchRecordAsync (recordId);

    return record;
}

//Retrieve (query)
private async Task<CKRecord []> QueryCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    Console.WriteLine ($"Default zone name = '{zoneId.ZoneName}' owner = '{zoneId.OwnerName}'");
    /*
    var zoneName = "_defaultZone";
    var ownerName = "__defaultOwner__";
    var zoneId0 = new CKRecordZoneID (zoneName, ownerName);

    Console.WriteLine ($"Assert { zoneId0 == zoneId }");
    */

    var recordType = "StationReferences";

    var location = new CLLocation (19.7303, -155.056);
    var predicate = NSPredicate.FromFormat ("distanceToLocation:fromLocation:(Position, %@) < 100", location);

    var query = new CKQuery (recordType, predicate);

    var result = await publicDatabase.PerformQueryAsync (query, zoneId);
    return result;
}

//Update
private async Task<CKRecord> UpdateInCloudKit (CKDatabase database, CKRecord record, NSString key, NSObject newValue)
{
    record [key] = newValue;
    var modifiedRecord = await database.SaveRecordAsync (record);
    return modifiedRecord;
}

//Delete 
private async Task<CKRecordID> DeleteRecord (CKDatabase database, CKRecord record)
{
    var id = record.Id;
    var deletedId = await database.DeleteRecordAsync (id);
    return deletedId;
}