iphone - 桌面上的SQLite记录不会出现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iphone - 桌面上的SQLite记录不会出现?相关的知识,希望对你有一定的参考价值。

我有一张桌子和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条记录,但我只能记录一条记录。我的意思是更改了那行“DatabaseClass * dbOBJ =(DatabaseClass *)[appDelegate.scores objectAtIndex:1];” objectAtIndex:1当我更改此值1或2或3等时,结果不会更改。它始终显示3条记录中的一条记录。我不明白原因。

谢谢。

答案

当您转到SQLite管理器(来自Firefox)并运行以下查询时,您是否能够看到表行:

select name,score from game;

如果您能够看到3条记录,那么:

  • 转到iPhone模拟器并重置设置(将清除所有临时缓存,数据库和构建文件)。
  • 转到Xcode并执行Build和GO。

这将为您提供最新的数据库;把它放在Build文件夹中。

另一答案

这可能不是您想要的答案,但您现在应该考虑使用Core Data,因为它在iPhone OS 3.0中。它可以为您处理大部分内容,并且非常易于使用。

另一答案

也许你忘了为你的代表设置分数?

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

//I don't see this in your code
((IDRGameAppDelegate *)[[UIApplication sharedApplication] delegate]).score = score;    

以上是关于iphone - 桌面上的SQLite记录不会出现?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 上的最佳 SQLite 实践 [关闭]

iPhone上的SQLite,奇怪的链接错误

iPhone Core Data 不会从 Sqlite3 获取任何数据

FMDatabase 是不是存在“NOT IN”问题或 iPhone 上的 SQLite 不支持它?

当 iPhone 的 Appstore 上的应用程序版本更改时,sqlite 数据库更新

如何测试 iPhone 应用程序更新?