2010-12-02 26 views
0

J'ai fait le codage pour enregistrer le highscore dans NSuserdefaults, mais je ne suis pas sûr comment puis-je charger les données de nsuserdefaults et l'afficher dans une table. Veuillez nous aider.Chargement des données dans NSUserDefaults

NSString *name; 

name = nametextbox.text; 

NSDictionary *player = [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%@", name], @"name",[NSString stringWithFormat:@"%d", myScore], @"score",nil]; 
[highScore addObject:player]; 

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"score" ascending:NO]; 
[highScore sortUsingDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

[[NSUserDefaults standardUserDefaults] setObject:highScore forKey:@"highScore"]; 
+4

@Jonathan Sterling passant en revue certains de vos commentaires les plus récents sur SO, vous voudrez peut-être baisser d'un cran ou deux. –

+0

En désaccord. (Aussi, celui qui a réparé ceci, merci!). Il y a beaucoup de questions qui ont un contenu valide, mais sont gâchées par une orthographe terriblement épouvantable et une mauvaise déclaration. Je pense que c'est le moins que l'on puisse attendre de nouveaux utilisateurs, pour au moins poser des questions de façon cohérente et utiliser quelque chose ressemblant aux termes appropriés. –

+0

En outre, en liant au guide de syntaxe Markdown, je suis constructif. C'est la différence entre un troll méchant et une personne frustrée qui essaie d'aider. –

Répondre

1

Vous devriez être en mesure de le charger juste la façon dont vous attendez (comme l'accès à une valeur dans un NSDictionary):

NSArray *highScore = [[NSUserDefaults standardUserDefaults] objectForKey:@"highScore"]; 

Mise à jour

Pour afficher les données de ce tableau dans une vue de table, vous devrez créer un contrôleur de vue et utiliser le tableau comme source de données. La façon la plus simple de le faire est de sous-classer UITableViewController. Cela devrait vous permettre de démarrer sur la mise en œuvre de ce contrôleur:

// HighScoreViewController.h 

@interface HighScoreViewController : UITableViewController { 
    NSArray *highScores; 
} 
@property (nonatomic, retain) NSArray *highScores; 
@end 

.

// HighScoreViewController.m 

#import HighScoreViewController.h 

static const NSInteger kNameLabelTag = 1337; 
static const NSInteger kScoreLabelTag = 5555; 

@implementation HighScoreViewController 
@synthesize highScores; 

- (void)viewDidLoad { 
    [self setHighScores:[[NSUserDefaults standardUserDefaults] 
         objectForKey:@"highScore"]]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
    return [self.highScores count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"PlayerCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cel == nil) { 
    cell = [[[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleDefault 
      reuseIdentifier:cellIdentifier] autorelease]; 

    // Create UILabels for name and score and add them to your cell 
    UILabel *nameLabel = [[UILabel new] autorelease]; 
    [nameLabel setTag:kNameLabelTag]; 
    [cell.contentView addSubview:nameLabel]; 

    UILabel *scoreLabel = [[UILabel new] autorelease]; 
    [scoreLabel setTag:kScoreLabelTag]; 
    [cell.contentView addSubview:scoreLabel]; 

    // Set other attributes common to all of your cells here 
    // You will also need to set the frames of these labels (nameLabel.frame = CGRectMake(...)) 
    } 

    NSDictionary *player = [self.highScores objectAtIndex:indexPath.row]; 
    NSString *name = [player objectForKey:@"name"]; 
    NSString *score = [player objectForKey:@"score"]; 

    [(UILabel *)[cell.contentView viewWithTag:kNameLabelTag] setText:name]; 
    [(UILabel *)[cell.contentView viewWithTag:kScoreLabelTag] setText:score]; 

    return cell; 
} 

@end 

Une chose clé à retenir avec UITableView est que les cellules se réutilisés, vous devez donc être prudent sur l'endroit où vous initialisez/configurer les sous-vues de votre cellule.

+0

J'ai la ligne de codage. Mais je ne suis pas sûr de savoir comment l'afficher dans la vue de la table avec le nom d'un côté et le score de l'autre. Désolé, je suis nouveau à cette programmation. – lol

+0

Mis à jour avec un exemple de code de contrôleur de vue de table. –

+0

merci pour le codage. mais comment puis-je définir les cadres de sorte qu'il sera constant pour tout le tableau – lol