2009-07-10 2 views
0

테이블과 3 개의 레코드가 있습니다.아이폰 - 테이블에 SQLite 레코드가 오지 않습니까?

및 코드가 있습니다.

-(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 개의 레코드에서 하나의 레코드를 보여줍니다. 이유를 모르겠다.

감사합니다.

답변

0

위임자에게 점수를 매기는 것이 좋습니다.

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

원하는 답변이 아니지만, iPhone OS 3.0에서 Core Data를 사용해보십시오. 그것은 당신을 위해 이것의 대부분을 처리하고 매우 쉬운 방법입니다.

1

HI,

  1. 당신이 게임에서 아래 쿼리

    선택 이름, 점수를 당신이 (파이어 폭스에서)를 SQite 관리자에 갈 때, 테이블 행을보고 실행할 수 있습니까;

    3 개의 레코드를 볼 수 있다면.

    a. 가능한 답변은 IPhone 시뮬레이터로 가서 재설정 설정 (모든 임시 캐시 데이터베이스와 빌드 파일을 지울 것임)

    b. xcode로 이동하여 BUild 및 GO를 수행하십시오.

    희망이 당신에게 최신 데이터베이스를 얻고 빌드 폴더에 넣어 것입니다

아난드