【问题标题】: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 进行初始化,然后在启动时获取此记录以确定您是应该等待同步还是重新开始。