听取NSPersistentStoreDidImportUbiquitousContentChangesNotification时iCloud如何向我的应用发送通知

时间:2014-05-06 15:59:43

标签: ios objective-c core-data synchronization icloud

我需要通过Core Data在iCloud和Web服务上保留数据。

我希望在网络服务上的数据发生变化时通知我的应用,就像iCloud上的数据在iCloud上保留更改时iCloud通知我的应用程序一样。

要处理iCloud的通知,我必须在NSPersistentStoreDidImportUbiquitousContentChangesNotification上推送一个监听器,我想建立相同的机制来处理对我的Web服务上持久保存的数据所做的修改。

那么,我想知道iCloud如何通知我的应用触发NSPersistentStoreDidImportUbiquitousContentChangesNotification通知?我怎么能在我的网络服务和我的应用程序之间做同样的事情呢?

谢谢!

1 个答案:

答案 0 :(得分:4)

Apple没有记录整个过程,但目标是您可以像NSPersistentStoreDidImportUbiquitousContentChangesNotification一样对待NSManagedObjectContextDidSaveNotification。也就是说,您可以合并来自iCloud的更改,就像合并对应用中不同托管对象上下文所做的更改一样。

iCloud通知涉及您无权访问且无法在iOS上复制的内容。具体来说,它在iOS上使用一个名为ubiquity守护程序(ubd)的单独进程。它在您的应用程序之外运行并独立于它,并负责与iCloud服务通信以发送/接收任何新的更改。当它收到新的更改时,它会更新您的持久存储文件并通知您的应用。由于您无法在iOS上运行外部进程,因此即使您知道它是什么也无法复制确切的流程。

您能够获得的最接近的是启动一个单独的线程或队列,以尽可能多地复制ubd。那个帖子会:

  • 从您的网络服务下载新数据
  • 使用此上下文创建新的托管对象上下文并保存新数据
  • 要么等待一段时间再重复这个过程,要么退出并留给你以后再重复。

保存这些更改后,系统会自动发布NSManagedObjectContextDidSaveNotification。您可以使用与处理NSPersistentStoreDidImportUbiquitousContentChangesNotification相同的方式处理它。如果您希望仅在应用程序从Web服务接收新数据时发生通知,则可以在保存这些更改后发布该通知。