首先让我指出,这不是核心数据迁移问题。我实际上不是在考虑更改核心数据模型,而是在应用程序更新期间添加其他项。

流程如下:

1)使用预加载的核心数据创建应用程序。具体来说,是清单。
2)用户可以通过更改某些值(拥有的,需要的等)来编辑此清单,但不能删除项目
3)我发布了带有添加的新项目的更新。用户的现有数据不会被修改(除非出于勘误目的需要进行更改)

我目前正在通过创建NSUserDefaults来检查用户是否已收到更新来进行管理,如果尚未收到更新,则添加新项。例如,如果用户要从1.4.3版升级到1.4.4版,则该应用将检查并添加在1.4.4版中添加的项目。但是,如果应用程序从1.4.0升级到1.4.4,它将检查并添加在1.4.1、1.4.2、1.4.3和1.4.4中添加的项目
。此外,如果用户正在安装版本1.4.4的新应用程序,则较新的项目已包含在预加载中,并且它知道不应用任何以前的更新。更新以.plist / xml文件形式应用

该系统目前可以正常运行,但是运行起来很麻烦,因为我的应用程序中现在有38个plist文件,还有37个if / else语句检查是否应用了更新。

肯定有更好的办法。我最初的想法是在应用程序中有两个数据库...一个数据库可以通过应用程序更新进行更新,第二个数据库可以由用户编辑。然后,随着每次应用程序更新,将对数据库进行比较,并将数据库中的任何新项目复制到可编辑商店中。我担心这将是一个漫长的过程(目前有37,000多个项目,当我在更新中添加400-500时很好,但是遍历37,000个项目并复制新项目会花费很长时间吗?)

我想这个问题对于这个网站可能太主观,如果可以的话,我深表歉意,但是建议将不胜感激!

扎克

最佳答案

您可以使用一个预加载数据存储来执行此操作,并且没有更新属性列表或if语句,如下所示:


将应用程序的当前版本存储为用户默认设置,以便在更新过程中可以将其作为以前的版本进行检索(听起来您已经在执行此操作,但是我想清楚一点)。
在预加载存储中,添加三个整数字段,分别与添加该预加载项的主版本,次版本和点发行版相对应。例如,如果在版本1.4.3中添加了一项,则major = 1,minor = 4和point = 3。
在更新期间向用户的数据存储中添加新项目时,请从用户默认设置中获取以前的应用程序版本,并从中获取主要,次要和重点更新编号。如果用户从版本1.4.0升级,请使用previousMajor = 1,previousMinor = 4,previousPoint =0。将这些值默认设置为零,以便在用户首次安装应用程序时使用。 ,所有三个均为零。
使用以下谓词从preload存储中获取需要添加的所有内容:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"major > %d and minor > %d and point > %d",
    previousMajor, previousMinor, previousPoint];

需要添加获取的所有内容。添加它,您就完成了。

10-07 19:46
查看更多