【发布时间】:2010-10-26 00:57:52
【问题描述】:
考虑一个带有一些“文档”作为模板的 iPhone 应用程序的 SQLite 数据库。用户也可以添加自己的模板。
我想更新程序和数据库。有没有机会在不覆盖用户数据的情况下这样做?
我考虑过两个不同的数据库,但由于这是开销,我想避免这个选项。
如何在不覆盖用户数据的情况下做到这一点?
【问题讨论】:
考虑一个带有一些“文档”作为模板的 iPhone 应用程序的 SQLite 数据库。用户也可以添加自己的模板。
我想更新程序和数据库。有没有机会在不覆盖用户数据的情况下这样做?
我考虑过两个不同的数据库,但由于这是开销,我想避免这个选项。
如何在不覆盖用户数据的情况下做到这一点?
【问题讨论】:
如果您使用的是 Core Data,那么添加新的数据模型(模式)版本并自动进行“迁移”应该相对容易。通过一些小的更改,您可能需要创建一个映射模型。如果您的架构随着实体的重构、抽象级别的添加等发生显着变化,那么您可能需要继承 NSEntityMigrationPolicy。
你可能想看看Core Data Model Versioning and Data Migration Programming Guide
您还可以查看 Marcus Zarra 的“核心数据”一书和示例代码。
【讨论】:
您可以让您的应用在运行时检查数据库的旧版本,并在必要时自行更新。所以基本上,更新应用程序,它将处理更新数据库。这将允许您备份/恢复数据(如有必要)。
【讨论】:
更新您的应用程序及其数据存储时,请在升级包中提供ALTER 脚本。当应用首次运行时,它应该:
ALTER 和 UPDATE 脚本将架构和数据从 v1 转移到 v2【讨论】: