是否有可能在iPhone应用程序中覆盖sqlite数据库

时间:2012-01-31 08:17:37

标签: iphone objective-c ios5 sqlite

我已经创建了基于Sqlite数据库的应用程序。

所以在我的应用程序中,最初我创建了带有一个数据的Sqlite数据库,并且已将该数据库添加到我项目中的“Resource”文件夹中。

当app第一次运行时,如果没有文件意味着检查Documents文件夹(Sandbox)中的db,请将db从Resource复制到Document文件夹。

之后,每个插入和删除操作仅在Document文件夹中的Db上执行。不在资源文件夹中的数据库。

所以,我在db中插入了50个项目,然后我从模拟器(或)设备中删除了该应用程序。

删除应用时,db也会被删除。

我的问题是==>如何在应用程序中的每次更新(插入,删除)时用db(在Documents文件夹中)覆盖Sqlite数据库(在资源文件夹中)?

因为Documment文件夹中的db文件在插入项目时会更新。

我正在使用XCode 4.2和iOS 5 sdk。

5 个答案:

答案 0 :(得分:3)

您创建后无法更改资源包(即应用文件)。您无法将SQLite数据库覆盖到数据包的资源文件夹中。

如果你仍想保留以前的数据库,那么只需从模拟器路径复制它,并在每次清理和构建应用程序时进行替换。

修改

您可以转到 /用户//库/应用程序支持/ iPhone模拟器/ “您使用的模拟器版本” / Application / “检查所有文件夹以查找您的应用内部此文件夹“ /”您的APP.app“

然后右键单击 APP文件,然后点击显示包内容。现在,您将能够看到您在App文件中使用的资源。您可以搜索数据库并备份/替换

答案 1 :(得分:1)

首先,应用程序包(资源文件夹)中的数据库文件是只读的,应用程序无法更改。

第二,安装更新后,应用程序包中的所有文件都会被更新中的文件替换。不会触及文档目录中的文件。

如果您需要更新文档目录中的数据库文件,则需要在某处执行更新方法并跟踪所使用数据库的文本。

答案 2 :(得分:1)

您无法修改应用程序包中存在的任何资源
这就是我们将数据库文件复制到应用程序的文档目录的原因,因此我们可以修改文件。
如果要保留数据,请使用 iCloud 服务备份数据。

答案 3 :(得分:0)

您必须通过在资源文件夹中打开数据库的另一个句柄来执行此操作,并为此执行操作。我假设你只有在模拟器中运行时才需要它。

在设备中运行时无法执行此操作。

答案 4 :(得分:0)

确实无法将该文档文件夹数据再次复制到资源包,因此我建议您在从模拟器或设备中删除应用程序之前备份该数据库。