3

在使用 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

4

2 回答 2

3

你没有得到顺子NSError,你得到的是CKError。查看 的文档CKError,实际上有一个CKPartialErrorsByItemIDKey密钥。如果您问我,这看起来像是返回由项目 ID 键入的 CKErrors 字典的键!userInfo 对象应包含该键。

也记录在这里

CloudKit 框架常量参考

于 2014-08-11T06:45:24.640 回答
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
    }
}
于 2016-05-26T01:28:09.240 回答