我想知道对我来说非常令人不安的事情。即。
让我们说我有一个应用程序。这是在Appstore中运行正常。 这个程序。有一个本地数据库,可以说5个表。
我更新此应用程序。并再添加2个新表,总共为7个。
当以前的应用版本用户将升级到较新版本时。是否也会为以前的版本用户更新数据库?
如果是的话? 然后将删除以前的数据。
如果没有 然后代码显然会发生一些崩溃,因为它需要新的东西,而不是被替换。
等待您的宝贵意见。
答案 0 :(得分:2)
这一切都取决于您的数据库。如果您使用的是CoreData,则可以将用户数据迁移到新的数据库和结构中。数据模型的所有信息都存储在项目的.xcdatamodel类中。它没有像其他文件一样捆绑到您的代码中。
您需要研究的部分是模型版本控制标识符。在这里,您将能够增加MOM,托管对象模型。
您也可以迁移数据。我会回顾一下关于CoreData的Apple文档,重点是版本控制和迁移。祝你好运。
答案 1 :(得分:1)
文档目录的内容保持不变。 .app包的内容完全被新版本替换。
如果将数据库存储在文档目录中并且应用程序对其进行了修改,则需要执行一些迁移以升级到新版本。如果它只是一个只读数据库,您可以使用新数据库复制它。
答案 2 :(得分:1)
如果数据库基于coredata,那么您需要use。
但是如果您使用的是sqlite DB
然后,您可以将应用程序的版本号保存到数据库中,每当调用数据库时(使用新安装/升级),将版本与预期版本进行比较如果新版本>旧版本然后使用SQL ALTER statements
更改架构(如果您已更改数据库的架构,则需要)并更新应用程序版本号。所以每当用户要更新或全新安装时,它都会检查旧版本的新版本,
if it differ then
update schema,
and if its same
no need to make any changes.
如果您没有进行任何与架构相关的更改(例如添加新列..),则无需担心,用户不会丢失数据。
答案 3 :(得分:0)
这取决于数据库的放置位置。应用程序包中的所有文件都将被替换。除非您覆盖它们,否则Documents目录中的文件将保持不变... 你在哪里存储你的数据库?
我认为一个好的方法是将数据库放在bundle中,然后在第一次运行时将其复制到文档目录,以便获得RW访问权限。 在更新的应用程序中,您可以检查Documents中是否存在数据库,并将表更新为新版本,如果没有,则只需将文件从bundle复制到新位置。