0

データの保存に 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);
}
}

どんな種類のヘルプ、提案、ヒントも大歓迎です。質問を読んでくれてありがとう。

4

1 に答える 1

0

問題が見つかりました。この問題は、リリース構成の C プリプロセッサ フラグ NS_BLOCK_ASSERTIONS=1 にありました。

このアサーションを削除すると、アプリは期待どおりに機能しました。この問題に直面している可能性のある誰かに役立つことを願っています。

于 2013-04-15T04:23:15.353 に答える