CloudKit“订阅重复”错误 - 获取 SubscriptionId

Posted

技术标签:

【中文标题】CloudKit“订阅重复”错误 - 获取 SubscriptionId【英文标题】:CloudKit "subscription is duplicate of" error - get SubscriptionId 【发布时间】:2017-12-05 22:17:39 【问题描述】:

我正在尝试将 CKQuerySubscription 保存到公共数据库 - 返回带有以下信息的 CKError

[
    "ServerErrorDescription": subscription is duplicate of 'C82E82EF-F373-4D75-A465-65364D8FEB12',
    "CKErrorDescription": Error saving record subscription with id E30DB4D5-2617-4E0D-8CFE-A14538140029 to server: subscription is duplicate of 'C82E82EF-F373-4D75-A465-65364D8FEB12',
    "NSDebugDescription": CKInternalErrorDomain: 2032,
    "NSUnderlyingError": <CKError 0x1c064ec70: "Server Rejected Request" (2032); server message = "subscription is duplicate of 'C82E82EF-F373-4D75-A465-65364D8FEB12'"; uuid = A5290A31-650C-44FC-B1C1-7BCB181291F8; container ID = "iCloud.com.mycompany.myapp">, 
    "NSLocalizedDescription": Error saving record subscription with id E30DB4D5-2617-4E0D-8CFE-A14538140029 to server: subscription is duplicate of 'C82E82EF-F373-4D75-A465-65364D8FEB12', "errorKey": ck1uc5yob, 
    "RequestUUID": A5290A31-650C-44FC-B1C1-7BCB181291F8, 
    "ContainerID": iCloud.com.mycompany.myapp
]

CKError 对象上的属性ancestorRecordclientRecordserverRecord 都是nil

如何从这个错误(即C82E82EF-F373-4D75-A465-65364D8FEB12)中获取服务器上存在的查询的ID。有没有我想念的财产?

【问题讨论】:

【参考方案1】:

有几个选项。我倾向于使用fetchAllSubscriptionsWithCompletion 处理程序来拉取所有订阅,然后解析我感兴趣的订阅,如下所示:

 [publicDatabase fetchAllSubscriptionsWithCompletionHandler:^(NSArray<CKSubscription *> * _Nullable subscriptions, NSError * _Nullable error)
   
     for (CKQuerySubscription *sub in subscriptions)
     
         NSString *predString = [NSString stringWithFormat:@"%@", sub.predicate];
     
 ];

但您也可以使用CKFetchSubscriptionsOperation 拉取所有订阅者,或根据订阅 ID 拉取特定订阅者。在这种情况下,您需要创建操作,配置您感兴趣的订阅 ID,将您的后处理代码添加到完成块,然后运行然后运行操作。

【讨论】:

是的,我目前已经开始配置订阅 ID,但就我而言,这不是一个理想的解决方案..

以上是关于CloudKit“订阅重复”错误 - 获取 SubscriptionId的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 光标错误和无法返回所有行 - 获取记录时遇到错误

CloudKit 无法从公共容器中获取数据。错误 1/4000

从 CloudKit 获取并保存到 CoreData

如何使用查询快速获取 cloudkit 数据

CloudKit 订阅内部服务器错误

CloudKit 数据库 fetchRecordWithID 错误