0

我将 NSPersistentCloudKitContainer 与 Core Data 一起使用,但由于我的 iCloud 空间已满而收到错误消息。打印的错误如下:<CKError 0x280df8e40: "Quota Exceeded" (25/2035); server message = "Quota exceeded"; op = 61846C533467A5DF; uuid = 6A144513-033F-42C2-9E27-693548EF2150; Retry after 342.0 seconds>

我想通知用户这个问题,但我找不到访问错误详细信息的方法。我正在听NSPersistentCloudKitContainer.eventChangedNotification,我收到一个 .partialFailure 类型的错误。但是当我想访问底层错误时,错误的partialErrorsByItemID属性为零。

如何访问此配额超出错误?

import Foundation
import CloudKit
import Combine
import CoreData

class SyncMonitor {
    fileprivate var subscriptions = Set<AnyCancellable>()

    init() {
        NotificationCenter.default.publisher(for: NSPersistentCloudKitContainer.eventChangedNotification)
            .sink { notification in
                if let cloudEvent = notification.userInfo?[NSPersistentCloudKitContainer.eventNotificationUserInfoKey] as? NSPersistentCloudKitContainer.Event {

                    guard let ckerror = cloudEvent.error as? CKError else {
                        return
                    }
                
                    print("Error: \(ckerror.localizedDescription)")
                    if ckerror.code == .partialFailure {
                        guard let errors = ckerror.partialErrorsByItemID else {
                            return
                        }
                    
                        for (_, error) in errors {
                            if let currentError = error as? CKError {
                                print(currentError.localizedDescription)
                            }
                        }
                    }
                
                }
            } // end of sink
            .store(in: &subscriptions)
    }
}
4

0 回答 0