背景
我们有一个iPhone应用程序,它使用sqlite
来存放大型数据库。我们使用FTS3
全文搜索,因此我们必须“滚动我们自己的”sqlite而不是使用iOS SDK中包含的库。我们使用合并的sqlite.c文件,并使用FMDB
作为Obj-C包装器。
问题
我的项目编译,但它崩溃了我安装的异常,以检测数据库是否出现故障(稍微更多)。然而,我的合作伙伴正在快速编写代码,没有任何问题 - 在我的 EXACT SAME 提交修订版上。这就是奇怪的事。
具体来说,应用程序在首次加载时执行以下操作:
databaseWithPath:
后跟open
。goodConnection
会返回YES
- 数据库确实已打开并正常工作。SELECT * FROM sqlite_master WHERE type = 'table'
不会返回任何记录。 (应该有很多表)我做了什么
现在,如果你要求sqlite“打开”一个不存在的数据库 - 它只会创建一个。这就是这种行为的样子。所以,我打开了一个终端窗口,在模拟器上导航到我应用程序的Documents目录,然后输入:
Makbook:Documents makdad$ sqlite3 myDB.db
哪个运行sqlite3,当然,一切都很好。我的所有数据都在那里。
我逐步介绍了FMDB的open方法,以确保我打开了正确的数据库。看起来我当然是。
我尝试的第一件事就是降级到Xcode 3.2.6。同样的问题,所以我认为我已经排除了Xcode 3/4的编译差异(尽管我最初怀疑它)。
有没有人有任何调试功能,或者有任何关于我的问题的知识?
答案 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。
我将打开一个关于新问题的新问题,因为这个问题与实际问题相差甚远:)