2010-12-05 8 views
-1

J'ai sauvegardé mes données dans NSUserDefaults mais je ne sais pas comment les afficher dans l'UITable.comment puis-je afficher les données sauvegardées dans la table

-(IBAction)savehighscore_button { 

    int i, ii = -1; 

    struct high_score { 
     NSString *name; 
     int highScore; 
    }; 

    NSString *nameentered; 

    nameentered = nametextbox.text; 

    struct high_score structArray[10]; 

    NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults]; 

    for (i=0; i<10; i++) { 

     if ([userPreferences stringForKey :[NSString stringWithFormat:@"highScoreNameEntry%d",i]] !=nil && [userPreferences stringForKey :[NSString stringWithFormat:@"highScoreEntry%d"]] !=nil) { 
      structArray[i].name= [userPreferences stringForKey:[NSString stringWithFormat:@"highScoreNameEntry%d",i]]; 
      structArray[i].highScore = [userPreferences integerForKey:[NSString stringWithFormat:@"highScoreEntry%d",i]]; 
      ii = i; 
     } 
    } 
    if (myScore >0) { 
     for (i==ii; i>=0; i--) { 
      if (myScore > structArray[i].highScore) { 
       if (i<9) 
        structArray[i+1] = structArray[i]; 
        structArray[i].name = nameentered; 
        structArray[i].highScore = myScore; 

        if (i==ii && i<9) 

         ii=i+i; 
        } 

        else if(i==ii && i<9) { 
         structArray[i+1].name = nameentered; 
         structArray[i+1].highScore = myScore; 
         ii=i+1; 
        } 
       } 
      } 

      if (ii==-1 && myScore >0) { 
       structArray[0].name = nameentered; 
       structArray[0].highScore = myScore; 
       ii=0; 
      } 
      for (i=0; i<=ii; i++) { 
       [userPreferences setObject:structArray[i].name forKey:[NSString stringWithFormat:@"highScoreNameEntry%d",i]]; 
       [userPreferences setInteger:structArray[i].highScore forKey:[NSString stringWithFormat:@"highScoreEntry%d",i]]; 

      } 

    [userPreferences synchronize]; 

    [nametextbox resignFirstResponder]; 

    [self viewDidLoad]; 
} 

Répondre

0

Pour utiliser UITableView, vous devez implémenter les méthodes UITableViewDelegate et UITableViewDatasource. (Ou mieux dit, votre UITableView a besoin d'une source de données et d'un délégué.Par exemple, disons que votre contrôleur de vue les implémente)

Maintenant, au lieu d'avoir une clé différente pour chaque ligne, vous voudrez probablement sauvegarder toutes les lignes dans un tableau (NSArray/NSMutableArray) et sauvegardez le tableau des trous à l'aide de NSUserDefaults. Étant donné que NSArray accepte uniquement les objets NSObjects et pas de structure, pour placer vos scores dans un NSArray/NSMutableArray, vous avez besoin d'une autre classe définie par vous-même ou vous pouvez utiliser un NSDictionary. Ce sera votre modèle. (Rappelez-vous MVC?;))

Une fois que vous avez cela, il est assez facile d'afficher le score dans un UITableView.

Ceci est un moyen de convertir votre structArray en un NSMutableArray

#define kScoreName @"scoreName" 
#define kHighScore = @"highScore" 
#define kDatasource = @"datasource" 


NSMutableArray *datasourceArray = [[NSMutableArray array] retain]; //this should be a instance variable 
for (i=0; i<10; i++) { 
    NSDictionary *score = [NSDictionary dictionaryWithObjectsAndKeys:structArray[i].name, kScoreName, [NSNumber numberWithInt:structArray[i].highScore], kHighScore, nil]; 
    [datasourceArray addObject:score]; 
} 

NSUserDefaults *defaults = [NSUserDefaults standardDefaults]; 
[defaults setObject:datasourceArray forKey:kDatasource]; 

Maintenant, il vous suffit de le faire [datasourceArray objectAtIndex: i] pour obtenir l'élément i-ème.

Ayant ce tableau que vous avez juste besoin de suivre un tutoriel sur UITableView, this est le premier dans ma recherche google. ;) Ou vous pouvez voir de nombreux échantillons d'Apple

Ceci est un exemple de la façon dont vous mettre en œuvre l'une des méthodes suivantes:

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
     reuseIdentifier:SimpleTableIdentifier] autorelease]; 
    } 

    NSUInteger row = [indexPath row]; 
    NSDictionary *score = [datasourceArray objectAtIndex:row]; 

    cell.textLabel.text = [score objectForKey:kScoreName]; 
    cell.detailTextLabel.text = [[score objectForKey:kHighScore] intValue]; 
    return cell; 

} 

@end 

Hope it helps;)

Note: Le code ci-dessus est le cerveau compilé;)

Questions connexes