我需要通过Core Data在iCloud和Web服务上保留数据。
我希望在网络服务上的数据发生变化时通知我的应用,就像iCloud上的数据在iCloud上保留更改时iCloud通知我的应用程序一样。
要处理iCloud的通知,我必须在NSPersistentStoreDidImportUbiquitousContentChangesNotification
上推送一个监听器,我想建立相同的机制来处理对我的Web服务上持久保存的数据所做的修改。
那么,我想知道iCloud如何通知我的应用触发NSPersistentStoreDidImportUbiquitousContentChangesNotification
通知?我怎么能在我的网络服务和我的应用程序之间做同样的事情呢?
谢谢!
答案 0 :(得分:4)
Apple没有记录整个过程,但目标是您可以像NSPersistentStoreDidImportUbiquitousContentChangesNotification
一样对待NSManagedObjectContextDidSaveNotification
。也就是说,您可以合并来自iCloud的更改,就像合并对应用中不同托管对象上下文所做的更改一样。
iCloud通知涉及您无权访问且无法在iOS上复制的内容。具体来说,它在iOS上使用一个名为ubiquity守护程序(ubd
)的单独进程。它在您的应用程序之外运行并独立于它,并负责与iCloud服务通信以发送/接收任何新的更改。当它收到新的更改时,它会更新您的持久存储文件并通知您的应用。由于您无法在iOS上运行外部进程,因此即使您知道它是什么也无法复制确切的流程。
您能够获得的最接近的是启动一个单独的线程或队列,以尽可能多地复制ubd
。那个帖子会:
保存这些更改后,系统会自动发布NSManagedObjectContextDidSaveNotification
。您可以使用与处理NSPersistentStoreDidImportUbiquitousContentChangesNotification
相同的方式处理它。如果您希望仅在应用程序从Web服务接收新数据时发生通知,则可以在保存这些更改后发布该通知。