iPhone - SQLite插入语句在调试配置中工作时在发布配置中不起作用

时间:2013-04-11 06:37:53

标签: iphone ios sqlite config xcode4.6

我正在开发一个像quiz这样的游戏项目,它使用sqlite db来存储数据。一切正常,即在“调试”配置中读取和写入数据库,游戏按预期工作。

然而,当我在发布配置中构建相同的游戏时。 sqlite“insert”和“update”语句不能正常工作。由于sqlite db读/写,该程序在几次播放后崩溃。

我在互联网上搜索了答案,发现一些建议说这是发布配置中的优化问题。

这是我在sqlite db中插入新播放器的代码。

- (void) insertPlayerWithName:(NSString *) playerName {

@try
{
    [self openDatabase];

    Player *p = [[Player alloc] init];
    p.name = playerName;
    p.energyRefillDate = [self getStringDateFromNSDate:[NSDate dateWithTimeIntervalSinceNow:100000]];

    NSLog(@"Date  : %@", p.energyRefillDate);
    NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO Player VALUES ('%@', %d, %d, %d, %d, %d, %d, %d, %d, %d, '%@', %d)", p.name, p.knop, p.gold, p.energy, p.karma, p.level, p.keyOfEnergy, p.keyOfWisdom, p.keyOfStrength, p.premium, p.energyRefillDate, p.numQuestsCompleted];

    char *error;
    if ( sqlite3_exec(_sqliteDBConnection, [insertSQL UTF8String], NULL, NULL, &error) != SQLITE_OK )
    {
        NSLog(@"Error While Inserting Player : %@", [NSString stringWithUTF8String:error] );
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setObject:playerName forKey:@"CurrentPlayer"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        sqlite3_close(_sqliteDBConnection);
    }
    [p release];
}
@catch (NSException *exception)
{
    NSLog(@"An exception while Error While Inserting Player in Sqlite :%@", exception);
}
@finally
{
    sqlite3_close(_sqliteDBConnection);
}
}

任何形式的帮助,建议和提示都受到高度赞赏。提前感谢您花时间阅读问题。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。问题在于发布配置中的C预处理程序标志NS_BLOCK_ASSERTIONS = 1。

当我删除此断言时,应用程序按预期工作。我希望它可以帮助那些可能面临这个问题的人。