在应用商店升级时,应用程序的行为是什么?

时间:2011-08-12 11:31:05

标签: iphone database sqlite

我想知道对我来说非常令人不安的事情。即。

让我们说我有一个应用程序。这是在Appstore中运行正常。 这个程序。有一个本地数据库,可以说5个表。

我更新此应用程序。并再添加2个新表,总共为7个。

当以前的应用版本用户将升级到较新版本时。是否也会为以前的版本用户更新数据库?

如果是的话? 然后将删除以前的数据。

如果没有 然后代码显然会发生一些崩溃,因为它需要新的东西,而不是被替换。

等待您的宝贵意见。

4 个答案:

答案 0 :(得分:2)

这一切都取决于您的数据库。如果您使用的是CoreData,则可以将用户数据迁移到新的数据库和结构中。数据模型的所有信息都存储在项目的.xcdatamodel类中。它没有像其他文件一样捆绑到您的代码中。

您需要研究的部分是模型版本控制标识符。在这里,您将能够增加MOM,托管对象模型。

您也可以迁移数据。我会回顾一下关于CoreData的Apple文档,重点是版本控制和迁移。祝你好运。

Apple Core Data Versioning

答案 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复制到新位置。