【问题标题】:Writing to SQLite3 on iPhone simulation在 iPhone 模拟上写入 SQLite3
【发布时间】:2009-08-04 14:51:26
【问题描述】:

我有一个在模拟器中运行的应用程序。我从 sqlite3 数据源读写。但是,如果我重新启动应用程序,那么我之前写入数据库的所有 datg 都会丢失。 数据始终处于其原始状态。

现在,当我开发这个应用程序时,我以为我在某个地方读到了无法通过 iphone 模拟器保存数据。

任何人都可以确认或否认这一点吗?

谢谢!

【问题讨论】:

    标签: iphone database persistence sqlite simulator


    【解决方案1】:

    您需要将您的数据库文件放在一个可写的地方,例如在Documents 文件夹中。所有捆绑文件都是只读文件。

    如果您通过应用分发初始数据库,则需要将其复制到 Documents(或其他文件夹)并使用该副本。

    您还需要确保关闭应用程序中的数据库连接正在关闭(即您收到applicationWillTerminate 消息)。

    【讨论】:

    • 谢谢。我正在复制到文档文件夹。但我不确定我是否正确关闭了数据库。让我们试试这个,看看会发生什么。
    • 好的。我调用 sqlite3_close 的唯一地方是当我对数据库初始化内容有错误时。在我的 applicationWillTerminate 消息中,我唯一要做的就是将所有数据实体更新到数据库,如果它们是脏的。除此之外,在那之后我没有关闭数据库。我可以做?仅仅是 sqlite3_close(db) 吗?
    • 你确定不是每次都覆盖你的可写数据库吗?
    • 是的,我确定。数据库由应用委托拥有。我的模型中的每个数据实体都有对它的引用。我的每个事务函数,例如 createData,都有一个 sqlite3_prepare_v2 语句,最终还有一个 sqlite3_reset 语句。这些函数都没有 sqlite3_close 或 sqlite3_finalize。具有这两个语句的唯一函数是在我的 initDatabase 函数(在 appdelegate 中),它也调用 sqlite3_open。
    • msaeed,我不认为是这样,但根据我刚刚输入的 NSLog,看来您是对的!我正在重写数据库。也就是说,检测它是否存在的代码不起作用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多