Core data 核心数据、iCloud和库存对象

Core data 核心数据、iCloud和库存对象,core-data,nsmanagedobjectcontext,icloud,merging-data,Core Data,Nsmanagedobjectcontext,Icloud,Merging Data,我正在更新一个本地核心数据驱动应用程序,以支持iCloud。我预期的一个挑战是关于我所称的“库存对象”——应用程序在首次发布时提供的种子数据,99%的用户将进行自定义 库存对象 Item A Item B Tomatoes Potatoes 自定义对象 Item A Item B Tomatoes Potatoes 如果用户第一次在新设备上启动应用程序,我认为默认行为是重新创建库存对象,这些对象将与iCloud持久存储中的自定义对象(项目a、项目B、西红柿、土豆)合并,从而产生混乱的用户

我正在更新一个本地核心数据驱动应用程序,以支持iCloud。我预期的一个挑战是关于我所称的“库存对象”——应用程序在首次发布时提供的种子数据,99%的用户将进行自定义

库存对象

Item A
Item B
Tomatoes
Potatoes
自定义对象

Item A
Item B
Tomatoes
Potatoes
如果用户第一次在新设备上启动应用程序,我认为默认行为是重新创建库存对象,这些对象将与iCloud持久存储中的自定义对象(项目a、项目B、西红柿、土豆)合并,从而产生混乱的用户体验

一种方法可能是在第一次启动时同步检查iCloud数据,如果存在,则不创建stock对象。但是,用户可能在第一次启动时离线,然后在第二次启动时,本地库存对象与iCloud自定义对象的不希望的合并也会发生

有没有办法将逻辑添加到iCloud合并中,以便来自云的定制对象(西红柿和土豆)的到来可以向我发出信号,在本地库存对象(项目A和项目B)被发送之前删除它们


谢谢

为什么不通过不提供种子对象来避免这种情况?只需在第一次启动时通过UI提示用户输入自己的对象。询问她以前是否使用过该应用程序,并解释在重新创建对象之前等待从iCloud同步可能需要付费

为什么不通过不提供种子对象来避免这种情况?只需在第一次启动时通过UI提示用户输入自己的对象。询问她以前是否使用过该应用程序,并解释在重新创建对象之前等待从iCloud同步可能需要付费

我不确定这是否是最好的方法,但这就是我正在做的:

  • 当用户选择启用iCloud时,我检查他们的iCloud目录是否为空
  • 如果是,没问题;我将数据库迁移到启用了iCloud选项的新本地存储,以便所有现有数据都移动到云
  • 如果不是,我检查本地数据库是否为空。如果是,我会清除所有库存对象,并从云中获取所有内容。如果不是,我告诉用户当前应用程序无法将本地数据库与iCloud数据库合并,并要求他们删除数据(或重新安装),从而避免了这个问题

  • 我不确定这是否是最好的方法,但这就是我正在做的:

  • 当用户选择启用iCloud时,我检查他们的iCloud目录是否为空
  • 如果是,没问题;我将数据库迁移到启用了iCloud选项的新本地存储,以便所有现有数据都移动到云
  • 如果不是,我检查本地数据库是否为空。如果是,我会清除所有库存对象,并从云中获取所有内容。如果不是,我告诉用户当前应用程序无法将本地数据库与iCloud数据库合并,并要求他们删除数据(或重新安装),从而避免了这个问题

  • 嗯,我不确定我是否想用这一点来麻烦用户。另一个问题是,我需要以一种特殊的方式处理充满库存对象的整个实体。假设stock FoodType对象(“肉”、“蔬菜”、“甜点”等)与Foods实体存在关系。即使它们的所有属性都匹配,如果它们是在不同的时间在不同的设备上创建的,核心数据似乎将它们视为不同的。因此,当合并发生时,我突然有两种“肉”食物类型,一些食物链接到一个对象,另一些链接到另一个对象。我有一个类似的例子。我提供了有用的种子对象,其中大多数从未更改过。一个简单的想法是添加一个布尔属性
    validated
    ,并从中获取逻辑。然后,你可以在用户没有注意到的情况下检查等价性并在后台进行“合并”。我不确定我是否想在前面给用户添麻烦。另一个问题是,我需要以一种特殊的方式处理充满库存对象的整个实体。假设stock FoodType对象(“肉”、“蔬菜”、“甜点”等)与Foods实体存在关系。即使它们的所有属性都匹配,如果它们是在不同的时间在不同的设备上创建的,核心数据似乎将它们视为不同的。因此,当合并发生时,我突然有两种“肉”食物类型,一些食物链接到一个对象,另一些链接到另一个对象。我有一个类似的例子。我提供了有用的种子对象,其中大多数从未更改过。一个简单的想法是添加一个布尔属性
    validated
    ,并从中获取逻辑。然后,您可以在后台检查等价性和“合并”,而用户不会注意到。