我正在尝试将我的应用程序连接到 CloudKit 以在线保存用户数据的副本。但是,当我们测试新安装时,我希望应用程序等到它从云端下载了所有必要的数据后再决定接下来显示哪个屏幕。
有没有办法知道CloudKit何时完成下载。我可以在输出中看到事件发生:
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(3225): <NSCloudKitMirroringDelegate: 0x600003324a80>: No more requests to execute.
我可以拦截这个吗?
您可以通过
NotificationCenter
(NSManagedObjectContext.didMergeChangesObjectIDsNotification
) 订阅核心数据上下文中的更改,或通过 NSFetchedResultsController
订阅更改以检测数据何时填充。
但是,主要技巧是了解应用程序启动时您的数据存储是否实际上为空,或者是否只是在等待同步。由于没有 API 来通知与 CloudKit 同步的 Core Data 的状态更改,因此您必须使用另一种机制来决定是否应该将其视为空/新数据库或等待数据同步。
这篇文章(不是我的)有关于如何处理这种情况的建议。
tl;dr:在 CloudKit 中设置一个标志,以指示您的数据库已通过创建 CKRecord 进行初始化,然后在启动时获取此记录以确定是否应该等待同步或重新开始。
P。斯特恩 嘿兄弟,你找到了你的问题的任何解决方案,因为我面临着同样的问题,如果你找到这个问题的任何解决方案,请发布。