在对CloudKit中的记录执行批处理操作时尝试处理错误时遇到了一些问题。
我成功地提取了包含部分错误的字典,我可以迭代它。但是,我无法获取解决CKErrorCodeServerRecordChanged冲突所需的记录。根据文档,我应该能够从字典中获得3条记录:
感谢您提供有关我在这里做错的任何提示。
func pushRecordChangesForZoneID(recordZoneID: CKRecordZoneID) {
// ...
modifyRecordsOperation.modifyRecordsCompletionBlock = { (savedRecords, deletedRecordIDs, error) -> Void in
if (error != nil) {
if error.code == CKErrorCode.PartialFailure.rawValue {
if let errorDict = error.userInfo?[CKPartialErrorsByItemIDKey] as? [CKRecordID : NSError] {
for (recordID, partialError) in errorDict {
if partialError.code == CKErrorCode.ServerRecordChanged.rawValue {
if let userInfo = partialError.userInfo {
let serverRecord = userInfo[CKRecordChangedErrorServerRecordKey] as? CKRecord
// serverRecord will always be nil
}
}
}
}
}
}
}
}
附加信息:当我打印部分错误(partialError.userInfo)的userInfo dict的描述时,它看起来不包含其他CKRecords:
[NSDebugDescription: CKInternalErrorDomain: 2037, NSLocalizedDescription: Error saving record <CKRecordID: 0x7fb41bf7e640; DA39FE08-AB0B-4F07-A42E-F5732B114706:(userData:__defaultOwner__)> to server: Protection data didn't match, NSUnderlyingError: <CKError 0x7fd89a92d370: "Unknown Error" (2037)>]
源错误字典(errorDict)的描述如下(我可以通过CKPartialErrorsByItemIDKey成功获取包含recordID和部分错误的字典):
[<CKRecordID: 0x7fb5bb88afa0; C1575083-F992-448A-8D77-D62C4A42D696:(userData:__defaultOwner__)>: <CKError 0x7fb5b961c6a0: "Batch Request Failed" (22/2024); server message = "Atomic failure"; uuid = 1E4C0FD5-EC10-4071-B277-102A9F1B0E5E; container ID = "iCloud.net.neverthesamecolor.atsumeru">, <CKRecordID: 0x7fb5bb848ad0; DA39FE08-AB0B-4F07-A42E-F5732B114706:(userData:__defaultOwner__)>: <CKError 0x7fb5b9653060: "Server Record Changed" (14/2037); "Error saving record <CKRecordID: 0x7fb41bd9ca50; DA39FE08-AB0B-4F07-A42E-F5732B114706:(userData:__defaultOwner__)> to server: Protection data didn't match">]
答案 0 :(得分:0)
文档称它只是自定义区域功能。
编辑2016年1月21日:即使在默认区域和公共数据库中,它现在也在为我工作。这是一个很大的变化。