2010-12-02 4 views
0

Я сделал кодировку, чтобы сохранить рекордер в NSuserdefaults, но я не уверен, как я могу загрузить данные из nsuserdefaults и отобразить их в таблице. Пожалуйста помоги.Загрузка данных в 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

@ Джонатан Стерлинг рассматривает некоторые из ваших последних комментариев о SO, вы можете захотеть отбросить его на две ступени. – 2010-12-02 07:34:23

+0

Не согласен. (Также, кто бы ни исправил это, спасибо!). Есть много вопросов, которые имеют действительный контент, но омрачены невозможным ужасным написанием и плохим заявлением. Я думаю, что это наименьшее, что мы можем ожидать от новых пользователей, по крайней мере, задавать вопросы согласованно и использовать что-то похожее на правильные термины. – 2010-12-02 15:26:06

ответ

1

Вы должны быть в состоянии загрузить его именно так, как можно было бы ожидать (как получить доступ к значению в качестве NSDictionary):

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

Update

Чтобы отобразить данные из этот массив в представлении таблицы, вам нужно создать контроллер представления и использовать массив в качестве источника данных. Самый простой способ сделать это - подклассификация UITableViewController. Это должно помочь вам начать работу с этим контроллером:

// 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 

ключевая вещь, чтобы помнить с UITableView в том, что клетки получают повторно, так что вы должны быть осторожны, о том, где вы инициализировать/настроить подвидов вашей ячейки.

Смежные вопросы