Восстановление ошибок с помощью CKPartialErrorsByItemIDKey
После получения .partialFailure
CKError
Я пытался восстановить идентификаторы и соответствующие ошибки, но у меня проблемы...
Прямо сейчас я использую:
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)")
}