我们如何可靠地检测用户何时耗尽 iCloud 存储空间?

问题描述 投票:0回答:1

我正在使用

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 帐户在同一设备中运行另一个应用程序时,它就是这样的。

enter image description here

  1. 它能够检测到quotaExceeded(错误代码25)
  2. 点击“立即同步”会触发同步操作立即运行。他们如何能够实现这一目标?我以为我们无法控制同步何时运行?

我想知道,我们怎样才能可靠地检测到用户何时耗尽 iCloud 存储空间?

谢谢你

ios swift icloud cloudkit
1个回答
0
投票

这个应用程序很可能直接使用 CloudKit API,而不是

NSPersistentCloudKitContainer
。因此它可以随时执行同步,并通过测试上传一个小
CKRecord
看看是否可以来确定是否超出配额。

© www.soinside.com 2019 - 2024. All rights reserved.