iphone - записи SQLite на таблицу не приходят? - PullRequest
0 голосов
/ 10 июля 2009

У меня есть таблица и 3 записи.

и у меня есть код;

-(void) readScoreFromDatabase {

sqlite3 *database;


scores = [[NSMutableArray alloc] init];


if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

    const char *sqlStatement = "select name,score from game";
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {



        // Loop through the results and add them to the feeds array
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
        //if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            // Read the data from the result row

            NSString *aName =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
            NSString *aScore =[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];


            DatabaseClass *dbOBJ = [[DatabaseClass alloc] initWithName:aName score:aScore];


            [scores addObject:dbOBJ];

            [dbOBJ release];
        } 
    }

    sqlite3_finalize(compiledStatement);

} else {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No Connection" 
                                                   delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
}
sqlite3_close(database);

}

и я использую этот код для отображения записей;

-(IBAction)refreshClick:(id)sender {

// Navigation logic -- create and push a new view controller
IDRGameAppDelegate *appDelegate = (IDRGameAppDelegate *)[[UIApplication sharedApplication] delegate];
DatabaseClass *dbOBJ = (DatabaseClass *)[appDelegate.scores objectAtIndex:1];

game1NameLabel.text = dbOBJ.name;
score1Label.text = dbOBJ.score;
}

У меня есть 3 записи, но я могу взять только одну запись. Я имею в виду, что изменили эту строку objectAtIndex: 1, когда я изменяю это значение на 1, 2, 3 и т. д., результат не меняется. Это всегда показывает одну запись из 3 записей. Я не понимаю причину.

Спасибо.

Ответы [ 3 ]

1 голос
/ 15 июля 2010

Можете ли вы увидеть строки таблицы, когда вы заходите в диспетчер SQLite (из Firefox) и запускаете следующий запрос:

select name,score from game;

Если вы видите 3 записи, то:

  • Перейти на симулятор iPhone и сбросить настройки (который очистит все временные кэши, базу данных и файлы сборки).

  • Перейдите в Xcode и выполните Build и GO.

Это даст вам последнюю базу данных; положить его в папку Build.

0 голосов
/ 10 июля 2009

Возможно, это не тот ответ, который вам нужен, но вам стоит подумать об использовании Core Data сейчас, когда он находится в iPhone OS 3.0. Он обрабатывает большую часть этого для вас и очень прост в использовании.

0 голосов
/ 10 июля 2009

Может быть, вы забыли выставить счет своему делегату?

scores = [[NSMutableArray alloc] init];
....

//I don't see this in your code
((IDRGameAppDelegate *)[[UIApplication sharedApplication] delegate]).score = score;    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...