Загрузка данных в NSUserDefaults - PullRequest
       23

Загрузка данных в NSUserDefaults

0 голосов
/ 02 декабря 2010

Я сделал кодирование, чтобы сохранить рекорд в 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"];

1 Ответ

1 голос
/ 02 декабря 2010

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

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

Обновить

Чтобы отобразить данные из этого массива в табличном представлении, вам необходимо создать контроллер представления и использовать массив в качестве источника данных.Самый простой способ сделать это - создать подкласс 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 следует помнить, что ячейки используются повторно, поэтому вам необходимобудьте осторожны с тем, где вы инициализируете / настраиваете подпредставления своей ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...