sqlite3无法为我读取数据库,但不能在另一台机器上进行相同的提交

时间:2011-05-27 01:33:56

标签: iphone ios sqlite xcode4 fmdb

背景

我们有一个iPhone应用程序,它使用sqlite来存放大型数据库。我们使用FTS3全文搜索,因此我们必须“滚动我们自己的”sqlite而不是使用iOS SDK中包含的库。我们使用合并的sqlite.c文件,并使用FMDB作为Obj-C包装器。

问题

我的项目编译,但它崩溃了我安装的异常,以检测数据库是否出现故障(稍微更多)。然而,我的合作伙伴正在快速编写代码,没有任何问题 - 在我的 EXACT SAME 提交修订版上。这就是奇怪的事。

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

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

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

    Makbook:Documents makdad$ sqlite3 myDB.db
    

    哪个运行sqlite3,当然,一切都很好。我的所有数据都在那里。

    我逐步介绍了FMDB的open方法,以确保我打开了正确的数据库。看起来我当然是。

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

    有没有人有任何调试功能,或者有任何关于我的问题的知识?

2 个答案:

答案 0 :(得分:1)

与我们的自定义编译SQLite3有同样的问题。我在此博客http://regularrateandrhythm.com/regular-rate-rhythm-blog/sqlite3-fts-in-IOS4.html

上找到了解决此问题的方法

答案 1 :(得分:0)

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

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

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

我将打开一个关于新问题的新问题,因为这个问题与实际问题相差甚远:)