使用CloudKit时,有时返回的错误是PartialFailure
,这可能是由重复订阅等引起的。请参阅下面的示例。
<CKError 0x7f8318711520: "Partial Failure" (2/1011);
"Failed to modify some subscriptions"; uuid = A434B010-7650-4BBA-8A7A-33CD0690FD15;
container ID = "iCloud.xxx.xxx"; partial errors: {
EFC65F4A-A595-44A3-A022-323D9CE9B535 = <CKError 0x7f831a007be0: "Server Rejected Request" (15/2032); server message = "subscription is duplicate of '_930081460_AA87A676-DE57-4530-8BB8-7465BF4F4303'">
C4913907-28F3-42DB-8455-9966D9084834 = <CKError 0x7f83185cfc20: "Server Rejected Request" (15/2032); server message = "subscription is duplicate of '_930081460_F92FA91D-3E92-4E46-AE59-E912F8871026'"> }>
我希望从主错误对象中检索这些部分错误,但我不知道如何。 NSError
没有partialError
属性,并且userInfo
中没有a key来检索该属性。
答案 0 :(得分:3)
你没有回到NSError
,你正在找回CKError
。查看CKError
的文档,实际上有一个CKPartialErrorsByItemIDKey
密钥。如果你问我,这看起来像将返回由项目ID键入的CKErrors字典的键! userInfo对象应包含该密钥。
此处还记录了
答案 1 :(得分:2)
两年后,我仍然没有想到如何访问部分错误,特别好记录。感谢@Acey让我走上了CKPartialErrorsByItemIDKey
对于那些正在挣扎的人,以下是我最终在CKModifySubscriptionsOperation
(Swift 2.2)中访问部分错误的示例:
someZoneSubscriptionOperation.modifySubscriptionsCompletionBlock = {(savedSubscriptions: [CKSubscription]?, deletedSubscriptionIDs:[String]?, operationError:NSError?) in
// check specifically for an error in changing subscriptions to custom zone with specific subscriptionID
if let partialError = operationError?.userInfo[CKPartialErrorsByItemIDKey]?[subscriptionID] as? ErrorType {
print(partialError) // prints partial error for custom zone with `subscriptionID` if it exists
}
}