我正在使用
NSPersistentCloudKitContainer
,将 CoreData
与 CloudKit
集成。
我想要实现的是,当出现同步错误时,提示用户进入 iCloud 设置来管理其存储,并且我们意识到用户没有足够的 iCloud 存储空间。
我正在使用以下代码片段来监控同步进度。
// https://crunchybagel.com/nspersistentcloudkitcontainer/
private func initEventChangedNotification() {
NotificationCenter.default.addObserver(
self,
selector: #selector(eventChangedNotification),
name: NSPersistentCloudKitContainer.eventChangedNotification,
object: nil
)
}
@objc func eventChangedNotification(_ notification: Notification) {
CoreDataStack.eventChangedNotification(notification)
}
static func eventChangedNotification(_ notification: Notification) {
guard let event = notification.userInfo?[NSPersistentCloudKitContainer.eventNotificationUserInfoKey] as? NSPersistentCloudKitContainer.Event else {
return
}
if let error = event.error {
print(">>>> error = \(error)")
if let ckError = error as? CKError {
print(">>>> ckError.errorCode = \(ckError.errorCode)")
print(">>>> ckError.localizedDescription = \(ckError.localizedDescription)")
}
error_log(error)
return
}
let isFinished = event.endDate != nil
...
}
我在 iCloud 存储已满的情况下运行上述代码。
我期待的是收到quotaExceeded(错误代码25)
但是,我收到的是partialfailure(错误代码2)
这是日志记录
>>>> error = Error Domain=CKErrorDomain Code=2 "(null)"
>>>> ckError.errorCode = 2
>>>> ckError.localizedDescription = The operation couldn’t be completed. (CKErrorDomain error 2.)
但是,当我使用相同的 iCloud 帐户在同一设备中运行另一个应用程序时,它就是这样的。
我想知道,我们怎样才能可靠地检测到用户何时耗尽 iCloud 存储空间?
谢谢你
这个应用程序很可能直接使用 CloudKit API,而不是
NSPersistentCloudKitContainer
。因此它可以随时执行同步,并通过测试上传一个小CKRecord
看看是否可以来确定是否超出配额。