CloudKit "подписка дубликат" ошибка - получить SubscriptionId

Я пытаюсь спасти 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
]

Свойства ancestorRecord, clientRecord а также serverRecord на CKError объект все nil,

Как я могу получить идентификатор запроса, который существует на сервере из этой ошибки (т.е. C82E82EF-F373-4D75-A465-65364D8FEB12). Есть ли свойство, которое мне не хватает, которое бы имело?

1 ответ

Есть несколько вариантов. Я склонен использовать fetchAllSubscriptionsWithCompletion обработчик, чтобы вытащить все подписки, а затем проанализировать те, которые меня интересуют, например, так:

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

Но вы также можете использовать CKFetchSubscriptionOperation для извлечения всех подписок или определенных подписок на основе идентификатора подписки. В этом случае вы создадите операцию, настроите интересующий вас идентификатор подписки, добавите код постобработки в блок завершения, а затем запустите и запустите операцию.

Другие вопросы по тегам