如何拆分 iOS sqlite 数据库?
Posted
技术标签:
【中文标题】如何拆分 iOS sqlite 数据库?【英文标题】:How to split an iOS sqlite db? 【发布时间】:2011-11-22 23:03:35 【问题描述】:我有一个现有的 ios 应用,它使用核心数据作为应用数据和用户数据。我的问题是更新应用程序数据是一场噩梦(我的第一个应用程序,所以我第一次做得并不理想)。我想将应用数据和用户数据拆分为 2 个单独的 sqlite 数据库(或存储,如果我的术语有误,请纠正我)。
任何提示将不胜感激。
【问题讨论】:
【参考方案1】:拥有两个 sqlite 文件是个好主意。现在痛苦正在分裂他们。
创建一个仅存在于您的 app bundle 中的新商店。确保数据与您首次发布应用时的数据保持一致。
您将需要遍历“用户”存储并找到与“参考”存储中存在的数据相同的所有数据并将其删除。如果用户更改了该数据,那么我将保留它并让用户整理重复项。
完成后,您的应用程序可以恢复正常功能并加载两个商店。我会在某处设置一个标志,以便您知道这已经完成并且您不会在每次启动时都运行检查。 “用户”存储的元数据是个好地方。
请注意,这需要在用户“使用”您的应用之前完成。这可能意味着更改您的启动例程,以便在需要迁移和过滤器时告诉用户发生了什么。
【讨论】:
谢谢马库斯。跟进问题:我的应用数据是奖励和要求列表。该应用程序允许用户“检查”以完成要求。用户数据将是完成日期,但在应用商店中引用哪个要求的最佳方式是什么。为每个需求添加一个唯一的 id 并将其与完成日期一起存储在用户存储中?还是有更适合跨商店引用的东西? Marcus,我从你的另一个 SO 答案中找到了我需要的东西:***.com/questions/8209932/…【参考方案2】:我不认为拥有多个持久存储是正确的解决方案。您可以在单个持久存储中简单地拥有单独的实体。 Core Data 会妥善处理。
【讨论】:
我的应用数据是一个预加载的 sqlite 数据库。这提供了用户与之交互的所有输入数据。用户数据基于此交互。问题是我不控制应用程序数据(除了将其加载到数据库中)并且它可以更改。当它发生变化时,加载更新通常需要的不仅仅是简单的迁移。我的想法是使用预加载的数据库(当前包含 3 个实体)作为应用程序数据,并创建一个用户存储来处理/跟踪所有用户交互。如果应用数据发生变化,我会创建一个新数据库并将其与应用更新交换。 在 iOS 上拥有两个持久存储是一个好主意。使用 iCloud 备份等,现在比以往任何时候都更加密切关注 ~/Documents 目录中存储了多少数据。存储太多,应用就有被拒绝的风险。以上是关于如何拆分 iOS sqlite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取存储在 iOS 持久性 sqlite 数据库中的值?