1

我开始构建一个 iOS 应用程序,该应用程序将利用核心数据并通过 iCloud 将其数据与其他设备同步。我正在考虑提供一个“同步”按钮,以便数据不会被来自 iCloud 的数据随机修改。然后会发生以下情况:-

用户 A 在设备 A 上工作并添加了两条记录。用户 B 当前正在设备 B 上工作,并且没有按下同步按钮。晚上,用户 B 决定更新设备 B 中的数据并按下同步按钮(我对这种情况有以下问题):-

  1. 该方法可以在mergeChangesFromContextDidSaveNotification按下同步按钮后插入这两条记录吗?(我认为可以。但是,只是想在继续使用此模型之前进行确认)
  2. 是否可以在将这两个对象插入设备 B 的数据库之前访问它们的属性?
4

2 回答 2

3

我不认为 iCloud 是为您的用例而设计的。iCloud为同一用户跨设备同步数据,即在多台设备上使用相同 Apple ID 登录的用户。这个想法是,当用户在不同的设备上打开应用程序时,他可以继续使用他之前在另一台设备上创建/修改的数据。

更新有相当长的延迟,因此即使您通过“同步”按钮启用/禁用同步,也不能保证实际交付时间,并且在某些情况下可能需要很长时间,具体取决于连接速度、机会、状态苹果服务器等

相反,您可以根据自己的服务器和数据方案设计定制的解决方案。

于 2013-07-31T12:32:44.933 回答
0

由于您将 iCloud 与 Core Data 一起使用——不,您不能做这样的事情。当 iCloud 同步 Core Data 更改时,它会在后台同步。它下载更改,将它们保存到数据存储中,然后在完成后告诉您已经发生的更改。调用mergeChangesFromContextDidSaveNotification不会保存更改——它们已经保存了。该调用的作用是使用持久存储中的新数据更新您的托管对象上下文。在新插入发生后,您会收到通知。将“已导入”通知视为来自另一个线程的“已保存”通知,告诉您一些已经完成的事情。

现在,如果您在收到导入通知时已经加载了托管对象,则可以将其当前属性与最近传入的更改更新中的属性进行比较。如果内存中还没有对象,则无法获取其旧值,因为它们已经被覆盖。

于 2013-07-31T16:26:08.717 回答