iOS中的SQLite包装器?

时间:2011-04-26 02:07:55

标签: objective-c ios4 sqlite

我有一个iPhone应用程序,可以将信息存储到SQLite数据库中。它和我的兄弟在手机上都很棒。东西被写入,它可以从中读取。但是,当在其他人的手机上运行时,它只会崩溃。为什么呢?

我正在使用Matteo Bertozzi的SQLite包装器(将文件放在classes文件夹中并在我的.h中链接到它们,如下所示:#import "Sqlite.h"

我还将libsqlite3.dylib导入了我的项目。

在我的.h中也声明了我的SQLite数据库:Sqlite *database;

像这样设置我的数据库:

if (database == nil) {
// Set up database connection
NSString *myDBTwo = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flashpics.db"];
database = [[Sqlite alloc] init];
[database open:myDBTwo];
}

并调用这样的查询(我的变量都不是零):

[database executeNonQuery:@"INSERT INTO images (id, thumbnail, album, caption) VALUES (?, ?, ?, ?)", photoID, thumbnailLocation, photoAlbumID, photoCaption];

然而,它在我朋友的手机上崩溃并在尝试阅读时返回EXC_BAD_ACCESS。当你尝试写信时没有任何反应。

请帮忙! 感谢

PS:这是包装器的链接:http://th30z.blogspot.com/2008/11/objective-c-sqlite-wrapper_8445.html

编辑#1:以下是我在加载应用时遇到的一些错误。也许这是造成它的?或者它没有链接到正确的库?

warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/usr/lib/info/dns.so (file not found).

这就是我做出让它崩溃的动作时所得到的。

Program received signal:  “EXC_BAD_ACCESS”.
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).

2 个答案:

答案 0 :(得分:2)

问题是您正在尝试写入应用程序包中的资源文件夹,该文件夹只能在非越狱系统上读取,出于安全/安全原因,您必须在文档文件夹中创建数据库,所以你将代码更改为...

编辑:抱歉我粘贴了错误的代码,这是固定版本。

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *myDBTwo = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"flashpics.db"];

答案 1 :(得分:1)

RTS是对的,您必须将其复制到可写的Documents目录(或类似的地方)。

它在您的设备上运行的原因?如果我不得不猜测我会说你们已经越狱了,并且没有真正强制执行无法修改的代码签名包的概念。