【问题标题】:Where should I store the SQLite DB for my iPhone app?我应该在哪里存储我的 iPhone 应用程序的 SQLite DB?
【发布时间】:2012-03-09 22:41:24
【问题描述】:

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

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

这种类型的数据库文件应该存储在哪里?我把它放在 Docs 目录中是否正确?根据 Apple 的说法,Docs 目录用于“关键数据”,即用户生成的数据或应用程序正常运行所需的数据。我觉得它属于这一类,坚持我的用户设置是正确的操作,但谁愿意等待上诉?

【问题讨论】:

    标签: ios iphone database sqlite


    【解决方案1】:

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

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

    在提交另一个应用程序之前,您应该真正查看整个 file system programming guide for iOS

    【讨论】:

      【解决方案2】:

      6 年更新:

      将数据存储在NSCachesDirectory 中会导致一个错误,正如预期的那样,用户自定义的数据会在设备需要时删除。在多次尝试与 Apple 应用审查争论这一点之后,我终于能够发布一个更新,其中数据现在存储在 NSDocumentsDirectory 的自定义目录中(应该是这样),它解决了所有上述问题。

      【讨论】:

        【解决方案3】:

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

        但是,您提到您正在持久化“您的用户设置”...如果您持久化的数据更类似于设置或首选项,那么它们应该驻留在 Defaults 子系统中。请参阅NSUserDefaults 的文档。

        【讨论】:

        • 感谢您的回复,我确实使用了“持久”的错误措辞。我的意思是让用户更改数据库,上面的答案表明库目录集可能是正确的点。在对此进行调查时,我发现更合适的位置可能是 Library/Application Support 目录。我将尝试对存储在那里的数据进行一些测试..
        猜你喜欢
        • 2011-02-15
        • 2017-05-30
        • 2010-11-10
        • 2011-05-15
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        相关资源
        最近更新 更多