静态应用程序数据和可更新用户数据与 Core Data 之间的关系

Posted

技术标签:

【中文标题】静态应用程序数据和可更新用户数据与 Core Data 之间的关系【英文标题】:Relationships between static application data and updatable user data with Core Data 【发布时间】:2010-10-26 17:05:26 【问题描述】:

我正在开发一个 iPhone 应用程序,该应用程序有一个庞大的项目数据库,用户可以将其标记为收藏或添加到某些列表中。

目前,SQLite 文件首先从 bundle 复制到文档目录,使其可写并用作 Core Data 持久存储。但是,当我需要部署应用程序更新以添加额外数据或修复小错误时,我会遇到问题,其中用户数据将丢失或应用程序数据需要同步。

经过一些研究,我发现也许我可以将应用程序数据作为只读持久存储添加到包中,然后将第二个可写持久存储添加到用户数据的文档目录 - Core Data 将为我组合数据。但后来我在文档中遇到了这个:

添加商店时,您可以通过以下方式指定不同的商店属性 配置。但是,当您创建配置时,请记住 您无法创建跨店关系。

我认为这意味着我将无法维护项目与列表或项目与“收藏”记录之间的关系。我想我可以付出额外的努力手动遍历关系。有人有这方面的经验吗?

【问题讨论】:

【参考方案1】:

Core Data 提供了一种架构来支持托管对象模型的版本控制以及数据从一个版本到另一个版本的迁移。如果您对模型的更改非常简单,您可以使用“轻量级迁移”,这非常简单。

在此处阅读 Apple 文档的更多信息:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreDataVersioning/Introduction/Introduction.html

【讨论】:

谢谢米哈尔。这看起来有助于模式更改,但大多数更改可能与数据有关。鉴于我不想丢失任何用户数据,我的问题更多在于捆绑包和存储在设备上的副本之间的数据同步。这就是为什么我正在研究只读和可写存储之间的数据分区。 您可以编写自己的实用程序来区分两个数据存储以仅提取新对象。更新应用程序时,您更新模型的版本,然后打开两个商店(文档和应用程序包中的新商店),并使用您的差异代码使用应用程序包中的数据更新用户模型。您可以在模型实体中使用附加字段来保存唯一的“静态”ID - 这样可以轻松导入或仅更新那些“静态”数据。

以上是关于静态应用程序数据和可更新用户数据与 Core Data 之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 和 Core Data:如何在更新之间保留用户输入的数据?

用户更新软件后如何保存Core Data?

在应用程序运行时替换 Core Data sqlite 文件,数据不更新

在 Core Data 中将“默认”数据与用户提供的数据混合在一起

asp.net和ado.net有啥区别?

.NET Core Web API理解