我遇到了核心数据和iCloud同步的一些有线行为。我在应用程序中添加了iCloud文档和Cloudkit功能,并订阅了这三个通知:
NSPersistentStoreCoordinatorStoresWillChangeNotification
NSPersistentStoreCoordinatorStoresDidChangeNotification
NSPersistentStoreDidImportUbiquitousContentChangesNotification
我第一次运行应用时收到了这些通知:
Using local storage: 1
store will Change notification
store did Change notification
Using local storage: 0
但是,NSPersistentStoreDidImportUbiquitousContentChangesNotification没有被解雇,因为核心数据没有从我的iCloud帐户无处不在的容器中下载数据。
然而,当我退出应用程序并在启用飞行模式时重新启动它时,我的所有数据都立即加载。似乎第一次启动时数据已下载并保存到SQLite存储,但未通知通知,因此我的UI可以刷新。
以前有没有人经历过这种情况,在那种情况下你做了什么。
答案 0 :(得分:0)
首次设置和“正常”同步操作之间存在差异。
首次设置时未发布NSPersistentStoreDidImportUbiquitousContentChangesNotification
;只有在以后发生变化时。这会通知应用导入它们(通过调用mergeChangesFromContextDidSaveNotification(_:)
)。
Apple的iCloud Programming Guide for CoreData非常有助于了解在哪个阶段发生的事情。
请参阅iCloud Performs a One-Time Setup和Core Data Posts Content Changes from iCloud上的章节。