【问题标题】:CloudKit - be notified when all data has been fetchedCloudKit - 在获取所有数据时收到通知
【发布时间】:2023-02-04 06:08:02
【问题描述】:

我正在尝试将我的应用程序连接到 CloudKit 以在线保存用户数据的副本。然而,当我们测试新安装时,我希望应用程序等到它从云端下载所有必要的数据,然后再决定接下来显示哪个屏幕。

有没有办法知道 CloudKit 何时完成下载。我可以在输出中看到发生了一个事件:

CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(3225): <NSCloudKitMirroringDelegate: 0x600003324a80>: No more requests to execute.

我可以拦截这个吗?

【问题讨论】:

    标签: swift core-data icloud cloudkit


    【解决方案1】:

    您可以通过NotificationCenter (NSManagedObjectContext.didMergeChangesObjectIDsNotification) 订阅 Core Data 上下文中的更改,或从 NSFetchedResultsController 订阅更改以检测您的数据何时填充。

    然而,主要技巧是了解应用程序启动时您的数据存储是否实际上是空的,或者它是否只是在等待同步。由于没有 API 来通知与 CloudKit 同步的 Core Data 的状态更改,您将不得不使用另一种机制来决定是否应将其视为空/新数据库或等待数据同步。

    This article(不是我的)对如何处理这种情况有建议。

    tl;dr:在 CloudKit 中设置一个标志以指示您的数据库已通过创建 CKRecord 进行初始化,然后在启动时获取此记录以确定您是应该等待同步还是重新开始。

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多