gpt4 book ai didi

iPhone 应用程序 SQLite 准备语句崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:46 24 4
gpt4 key购买 nike

我正在构建的应用程序之一使用 SQLite 来存储从服务器下载的数据。

应用本身使用多线程,因此在应用启动时,应用会在后台下载数据,同时还会向用户呈现 UI。

此时用户可以开始浏览应用程序,点击表格行以深入了解详细信息页面。

有时,当我点击表格行时,应用程序会在许多 sqlite3_prepare_v2() 函数调用之一处崩溃。当我为我的 NSOperationQueue 允许超过 1 个最大并发操作时,它发生得更频繁。但是,现在我将最大并发操作数限制为 1,这种情况发生的次数少了很多。

当我的应用程序启动时,我将打开一个数据库连接并保持打开状态直到应用程序需要终止,然后我关闭连接。

这是它崩溃的示例行:

if(sqlite3_prepare_v2(objDatabase, [strGet cStringUsingEncoding:NSUTF8StringEncoding], -1, &stmtGet, NULL) == SQLITE_OK)
{
...
}

错误提示 EXEC_BAD_ACCESS

就像应用程序运行 20 次中有 1 次或 30 次中有 1 次,它会崩溃。所以这意味着我的 SQL 语句在 99% 的时间都有效。

有人遇到过这种情况吗?

最佳答案

我遇到了同样的问题。仔细检查对 sqlite3_prepare_v2 指令的所有调用,并确保为它们中的每一个调用匹配的 sqlite3_finalize。在我的例子中,我有一个没有调用 sqlite3_finalize 的位置,导致下次调用 sqlite3_prepare_v2 时崩溃。它并不总是崩溃,而且很难像疯了一样调试。希望此评论对您有所帮助。

您可能真的会发现为 sqlite3_prepare_v2 和 sqlite3_finalize 编写 stub 函数很有帮助,这些 stub 函数将这些操作记录到 NSLog。这将有助于验证匹配的调用。

关于iPhone 应用程序 SQLite 准备语句崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com