繁体   English   中英

我应该在哪里存储我的iPhone应用程序的SQLite数据库?

[英]Where should I store the SQLite DB for my iPhone app?

我在市场上有几个iOS应用程序,在所有这些应用程序中,我有一个连接到应用程序的小型SQLite数据库文件,为用户提供我的数据。 安装后,用户可以通过更改某些选项来自定义此DB。

到目前为止,所有这些应用程序都将数据库存储在NSDocumentsDirectory 提交我的上次更新后,它被拒绝将数据存储在错误的位置。 对于拒绝的应用程序,我将存储位置更改为NSCachesDirectory 我现在担心缓存将被清除并删除用户自定义。 该应用程序仍然可以运行,数据库将被重新创建,但所有更改的表都将被重置,从而扰乱用户。

这种类型的数据库文件应该存储在何处? 我把它放在Docs目录中是对的吗? 根据Apple的说法,Docs目录是针对“关键数据”,它是用户生成的数据或正确运行应用程序所需的数据。 我觉得它属于那个类别,坚持我的用户设置是正确的操作,但谁想等待上诉?

Apple的iOS文件系统编程指南将(application_home)/Library路径描述为“为要备份但未向用户公开的文件创建自定义子目录”的位置。 (application_home)/Documents路径被描述为“该目录的内容可以通过文件共享提供给用户”。

您的数据库听起来不像文档,它们听起来像用户不应该知道的私有缓存。 我建议您创建一个目录,如(application_home)/Library/Database并在那里保存文件。 你提到的缓存路径听起来不是我的最佳选择。

在提交另一个应用程序之前,您应该查看iOS的整个文件系统编程指南

6年更新:

将数据存储在NSCachesDirectory导致错误,正如预期的那样,只要设备感觉到,用户自定义数据就会被删除。 经过多次尝试与Apple应用程序评论争论点后,我终于发布了一个更新,其中数据现在存储在NSDocumentsDirectory中的自定义目录中(应该如此),这解决了所有上述问题。

如果您的数据库确实包含用户生成的内容,则Documents目录是其正确的位置。

但是,您提到您持久保存“用户设置”...如果您持久存储的数据更类似于设置或首选项,则它们应驻留在默认子系统中。 请参阅NSUserDefaults的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM