我有一个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).
答案 0 :(得分:2)
问题是您正在尝试写入应用程序包中的资源文件夹,该文件夹只能在非越狱系统上读取,出于安全/安全原因,您必须在文档文件夹中创建数据库,所以你将代码更改为...
编辑:抱歉我粘贴了错误的代码,这是固定版本。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *myDBTwo = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"flashpics.db"];
答案 1 :(得分:1)
RTS是对的,您必须将其复制到可写的Documents目录(或类似的地方)。
它在您的设备上运行的原因?如果我不得不猜测我会说你们已经越狱了,并且没有真正强制执行无法修改的代码签名包的概念。