2013-04-11 37 views
0

我正在開發一個類似測驗的遊戲項目,它使用sqlite數據庫來存儲數據。一切正常,即按照預期的方式在「調試」配置和遊戲中讀寫數據庫。iPhone - SQLite的插入語句不起作用在釋放配置,同時在調試配置工作

但是,當我在發佈配置中構建相同的遊戲時。 sqlite的「插入」和「更新」語句不工作,因爲它應該。由於sqlite數據庫讀/寫,程序在幾次播放後崩潰。

我在網上搜索了答案,發現很少有建議說這是發佈配置中的優化問題。

這是我在sqlite數據庫中插入新玩家的代碼。

- (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); 
} 
} 

任何形式的幫助,建議,提示,高度讚賞。提前感謝您花時間閱讀這個問題。

回答

0

我發現了這個問題。問題出現在發佈配置中的C預處理器標誌NS_BLOCK_ASSERTIONS = 1。

當我刪除這個斷言時,應用程序按預期工作。我希望它能幫助那些可能面臨這個問題的人。