objective-c - iPhone 中的 Sqlite3 数据库被锁定 - 如何避免?

标签 objective-c ios multithreading sqlite xamarin.ios

我有一个在 Sqlite3 数据库上执行搜索的查询。它除了使用阅读器阅读外什么都不做。 对于每个找到的匹配项,它都会调用 UI 的回调来更新结果 View 。

在运行此搜索时,我点击了 UI 中的一个按钮,该按钮将在新线程中执行一些其他操作。最后它应该删除搜索 Controller 的 View 并显示一个新的 Controller 。

但是,在某些时候,触发的操作想要写入数据库。它就卡在那里,最终我会看到数据库被锁定的异常。

有趣的是,搜索阅读器也不继续,这是一个死锁。

我是否必须以某种特殊方式打开数据库以支持多线程使用?连接的构造函数是什么?

最佳答案

MonoTouch 5.1+ 提供了一个 API让您选择要与 SQLite 一起使用的线程模型。

SqliteConnection.SetConfig (SQLiteConfig.MultiThread);

这映射到一些连接 options SQLite 库。

更新:如果您使用的是早期版本的 MonoTouch(例如 4.2 和 5.0.x 之间),您可以使用附加到错误报告的二进制文件 #652 (按照说明操作)或将补丁(p/调用和枚举)复制粘贴到您自己的应用程序中。

关于objective-c - iPhone 中的 Sqlite3 数据库被锁定 - 如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325601/

相关文章:

ios - Ionic 和 iOS - 应用程序传输安全设置

Python多线程和不一致的输出

ios - 从NSMutableDictionary构建NSMutableArray导致NSException

ios - UICollectionView 的 cellForItemAtIndexPath 没有被调用

iphone - 我怎样才能摆脱这个警告?

ios - ftp图片上传导致图片被快速截断

ios - 两个 iPhone 摄像头的 View 相同吗?

c - 主进程 -> pthread -> fork + execvp

java - 看起来Servlet中只有一个线程处理所有请求

objective-c - "Weighted"随机数发生器