Вы должны быть в состоянии загрузить его именно так, как можно было бы ожидать (как получить доступ к значению в качестве 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
в том, что клетки получают повторно, так что вы должны быть осторожны, о том, где вы инициализировать/настроить подвидов вашей ячейки.
@ Джонатан Стерлинг рассматривает некоторые из ваших последних комментариев о SO, вы можете захотеть отбросить его на две ступени. – 2010-12-02 07:34:23
Не согласен. (Также, кто бы ни исправил это, спасибо!). Есть много вопросов, которые имеют действительный контент, но омрачены невозможным ужасным написанием и плохим заявлением. Я думаю, что это наименьшее, что мы можем ожидать от новых пользователей, по крайней мере, задавать вопросы согласованно и использовать что-то похожее на правильные термины. – 2010-12-02 15:26:06