Восстановление ошибок с помощью CKPartialErrorsByItemIDKey

После получения .partialFailureCKErrorЯ пытался восстановить идентификаторы и соответствующие ошибки, но у меня проблемы...

Прямо сейчас я использую:

print("pE \(error.partialErrorsByItemID) or \(error.userInfo[CKPartialErrorsByItemIDKey])")

    if let dictionary = error.userInfo[CKPartialErrorsByItemIDKey] as? [NSObject: Error] {

print("partialErrors #\(dictionary.count)")    // <-- Not reaching this...

Я также попробовал следующее:

if let dictionary = error.partialErrorsByItemID {   // <-- error.pEBIID returns nil

а также:

if let dictionary = error.userInfo[CKPartialErrorsByItemIDKey] as? [CKRecord : CKError /* and Error */] {    // <-- but neither triggers the if-let

Первый вывод показывает это в консоли (я переключил открытые теги влево, чтобы они не интерпретировались как html):

pE nil or Optional({
">CKRecordID: 0x7b95ace0; CentralTableView:(_defaultZone:__defaultOwner__)>" = ">CKError 0x7a7e4cf0: \"Server Record Changed\" (14/2004); server message = \"record to insert already exists\"; uuid = B7AD7528-D8AE-4DCB-91FF-16B5271110F5; container ID = \"iCloud.com.yadayadayada\">";
})

Как я понимаю из документации, я должен получить NSDictionary<CKRecordID, (CK)Error> обратно из userInfo словарь с CKPartialErrorsByItemIDKey и NSDictionary<NSObject, Error> от partialErrorsByItemID метод. Основываясь на первом выводе, метод не работает в этой ситуации, но ключ дает мне словарь CKRecordID и CKError. Я не понимаю, почему второй отпечаток не достанется?

1 ответ

Решение

Согласно документации, вы получите обратно NSDictionary, а не словарь Swift.

Пытаться:

if let dictionary = error.userInfo[CKPartialErrorsByItemIDKey] as? NSDictionary {
    print("partialErrors #\(dictionary.count)")
}
Другие вопросы по тегам