我正在尝试将我的应用连接到CloudKit以在线保存用户数据的副本。但是,当我们使用新安装进行测试时,我希望应用等到从云中下载了所有必要的数据后再决定接下来显示哪个屏幕。
是否有办法知道CloudKit何时完成下载。我可以在输出中看到一个事件发生:CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(3225): <NSCloudKitMirroringDelegate: 0x600003324a80>: No more requests to execute.
我能拦截这个吗?
1条答案
按热度按时间hgb9j2n61#
您可以通过
NotificationCenter
(NSManagedObjectContext.didMergeChangesObjectIDsNotification
)订阅Core Data上下文中的更改,或从NSFetchedResultsController
订阅更改以检测数据何时填充。然而,主要的技巧是知道你的数据存储在应用启动时是否真的是空的,或者它是否只是在等待同步。由于没有API来通知与CloudKit同步的核心数据的状态变化,你将不得不使用另一种机制来决定你应该将它视为空/新数据库还是等待数据同步。
This article(不是我的)有关于如何处理这种情况的建议。
tl;dr:在CloudKit中设置一个标志,通过创建CKRecord来指示DB已初始化,然后在启动时获取该记录,以确定是应该等待同步还是重新启动。