如何最好地将巨大的 .sqlite 数据库移动到旧的低内存 iOS 设备上的新目录?

How to best move a huge .sqlite database to a new directory on an old, low memory iOS device?

对于我最新的应用程序更新,我必须将用户的 Core Data .sqlite 数据库从 Documents 目录移动到 Application Support 目录。我使用 migratePersistentStore:toURL:options:withType:error: 方法。我正在与一位用户打交道,她以某种方式设法在她的数据库中保存了足够的数据,以至于现在它达到了惊人的 9G。最重要的是,她的设备是 iPad Air 1 - 它在五六年前推出时存在内存问题,现在是 2018 年,她是 运行 最新的 iOS。 migratePersistentStore:toURL:options:withType:error: 方法使内存不足的应用程序不断崩溃。但是我没有其他方法可以将 .sqlite 放到必要的位置。谁能建议我如何最好地处理这种情况?理想情况下,我可以在我的代码中做一些事情 - 但我什至会很感激关于其他方式的建议,我现在可以帮助用户手动移动那个庞大的数据库!

我猜你使用 migratePersistentStore 因为这是官方的做法。这是一个好方法,但有时你必须弄脏你的手:

加载前在应用程序启动时手动移动数据库

This post 表明 CoreData 可能使用多个文件,您必须移动这些文件。您可以列出目录中的文件,使用正则表达式查找所有必须移动的文件,将它们移动到新位置,然后像往常一样从新位置加载 CoreData。

然而,这需要有必要的基础设施才能做到这一点。如果你想走这条路,你会想通的。

您可以将其隐藏在功能标志后面,仅使用代码,仅针对特定用户或在内存不足时崩溃,因此不会影响不需要它的用户。