使用CKPartialErrorsByItemIDKey

时间:2016-10-02 22:22:21

标签: ios swift error-handling cloudkit ckerror

获得.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 个答案:

答案 0 :(得分:5)

根据文档,您将获得NSDictionary,而不是Swift词典。

尝试:

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