我正在开发一款针对iphone的游戏,其中图像从互联网上加载,然后存储在本地数据库中,因此无需再次加载。这一直很好。 最近我为测试组创建了一个新的adhoc发行版(我第一次使用SDK 3.1.2创建发行版),现在每个将iphone升级到3.1.2的人都不再能够写入数据库了,因此必须每次从互联网加载图像。 iphone版本低于3.1.2的用户没有问题,之前的版本(SDK 3.1或更低版本)在带有3.1.2的iphone上没有问题。 我对游戏所做的更新与游戏中的数据管理器无关。另一个奇怪的事情是我在控制台中没有使用以下代码找到任何消息:
- (void) saveImage:(NSString *)imagePath withData:(NSData *)imageData {
if (insert_image_statement == nil){
const char *sql2 = "INSERT INTO image (imagePath, imageData) VALUES (?, ?);";
if (sqlite3_prepare_v2(database, sql2, -1, &insert_image_statement, NULL) != SQLITE_OK) {
NSLog(@"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}
sqlite3_bind_text(insert_image_statement, 1, [imagePath UTF8String], -1, NULL);
sqlite3_bind_blob(insert_image_statement, 2, [imageData bytes], [imageData length], NULL);
int success = sqlite3_step(insert_image_statement);
if (success == SQLITE_ERROR){
NSLog(@"Error: failed to insert statement with message '%s'.", sqlite3_errmsg(database));
}
sqlite3_reset(insert_image_statement);
}
所以sqlite3没有抛出错误,这可能指向我解决这个问题。有没有人知道为什么使用SDK 3.1.2我似乎没有权限将数据写入数据库?
答案 0 :(得分:0)
此问题已解决?我遇到了与3.1.2中的Device / Release版本类似的问题,其中if(sqlite3_exec(...))中抛出了错误;语句,但不返回任何错误消息。
********更新:通过修改引用以包含设备上的完整路径来达到部分解决方案。 Google的“checkAndCreateDatabase”方法代码。我仍然在3.1.2操作系统中的设备上的sqlite prepare语句中出现故障,我在模拟器中没有。**********
-(void)initializeDatabaseFunctions {
databaseName = "RowTable.db";
returnCode = sqlite3_open(databaseName, &sqlite);
NSString *dropRows = [[NSString alloc]initWithFormat:@"DROP TABLE IF EXISTS rows;"];
if(sqlite3_exec(sqlite, [dropRows UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
NSLog(@"Error DROP TABLE IF EXISTS rows: %s", errorMsg);
sqlite3_free(errorMsg);}