2016-10-02 11 views
2

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

Сейчас я использую:

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.

Try:

if let dictionary = error.userInfo[CKPartialErrorsByItemIDKey] as? NSDictionary { 
    print("partialErrors #\(dictionary.count)") 
} 
+0

Удивительный спасибо! –