1

背景

sqlite我们有一个用于大型数据库的 iPhone 应用程序。我们使用FTS3全文搜索,所以我们必须“推出我们自己的”sqlite,而不是使用 iOS SDK 中包含的库。我们使用合并的 sqlite.c 文件,并FMDB用作 Obj-C 包装器。

问题

我的项目可以编译,但它在我安装的异常中崩溃,以检测数据库是否出现故障(稍后会详细介绍)。然而,我的搭档正在愉快地编码,没有任何问题 - 在与我完全相同的提交修订上。这就是奇怪的地方。

具体来说,应用程序在首次加载时执行以下操作:

  1. 将数据库复制到用户的文档目录中,使其可写。(工作正常)
  2. 使用 FMDB 打开数据库,databaseWithPath:后跟open.
  3. 此时调用goodConnectionFMDB 会返回YES- 数据库确实是打开的并且正在工作。
  4. 调用SELECT * FROM sqlite_master WHERE type = 'table'不返回任何记录。(应该有很多表)

我试过的

现在,如果你让 sqlite “打开”一个不存在的数据库——它只会创建一个。这就是这种行为的样子。因此,我打开了一个终端窗口,导航到模拟器上我的应用程序的 Documents 目录,然后输入:

Makbook:Documents makdad$ sqlite3 myDB.db

它运行 sqlite3,当然,一切看起来都很好。我所有的数据都在那里。

我逐行检查了 FMDB 的打开方法,以确保我打开了正确的数据库。看来我确实是。

我尝试的第一件事是降级到 Xcode 3.2.6。同样的问题,所以我认为我已经排除了编译中的 Xcode 3/4 差异(尽管我一开始怀疑)。

有没有人可以尝试调试,或者知道我的问题可能是什么?

4

2 回答 2

1

我们自定义编译的 SQLite3 也有同样的问题。我在这个博客http://regularrateandrhythm.com/regular-rate-rhythm-blog/sqlite3-fts-in-IOS4.html上找到了解决这个问题的方法

于 2011-06-20T16:19:30.167 回答
0

问题出在 iOS 4.3 SDK 模拟器上。我忽略了测试 iOS 设备本身,它可以工作。

为了支持较旧的 iOS 版本,我们使用 -weak_library /usr/lib/libSystem.B.dylib 链接器标志。在 iOS Simulator 4.3 上删除该标志会停止与 sqlite3 相关的所有奇怪行为。

我的合作伙伴没有遇到问题的原因是他们运行的是 Xcode 3.2.5,即 4.2。即使我降级到 Xcode 3,我仍然安装了 4 - 所以 3 也在使用 4.3 SDK。

我将就新问题提出一个新问题,因为这个问题与实际问题相去甚远:)

于 2011-06-01T02:40:43.710 回答