내 머리가 어긋나는 문제가 있습니다. NSUserDefaults 인스턴스가 있고 거기에 일부 값을 저장했습니다. 이 값 중 하나는 다른 디스플레이에서 사용될 플레이어 점수 (게임)가 포함 된 배열입니다. 게임이 끝난 후 배열을 새 점수로 업데이트하고 NSUserDefaults에 다시 할당합니다. 그러나 콘솔에 카운트를 인쇄하려고 할 때 어떤 이유로 디버그가 제대로 작동하지 않는 것처럼 보입니다. 지금까지 만든이NSUserDefaults 배열이 제대로 저장되지 않습니다.
// // SAMHighScoreInputViewController.m // Tappity // // Created by Sam on 29/05/13. // Copyright (c) 2013 Sam. All rights reserved. //
#import "SAMHighScoreInputViewController.h"
#import "SAMScoreObject.h"
@interface SAMHighScoreInputViewController()
@end
@implementation SAMHighScoreInputViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self; }
- (void)viewDidLoad {
self.defaults = [NSUserDefaults standardUserDefaults];
self.nameScoreLabel.text = [NSString stringWithFormat:@"%@ - %@", [self.defaults objectForKey:@"lastName"], [self.defaults objectForKey:@"lastScore"]];
self.nameTextField.text = [self.defaults objectForKey:@"lastName"];
[super viewDidLoad]; // Do any additional setup after loading the view. }
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. }
- (IBAction)textFieldValueChanged:(UITextField *)sender {
self.nameScoreLabel.text = [NSString stringWithFormat:@"%@ - %@", self.nameTextField.text, [self.defaults objectForKey:@"lastScore"]];
}
- (IBAction)submitButtonTapped:(UIButton *)sender {
SAMScoreObject *score = [[SAMScoreObject alloc] init];
score.playerName = self.nameTextField.text;
score.score = [self.defaults integerForKey:@"lastScore"];
NSArray *scores = [self.defaults objectForKey:@"scoresArray"];
NSMutableArray *updatedArray = [scores mutableCopy];
[updatedArray addObject:score];
NSArray *updatedArrayScores = [updatedArray copy];
[self.defaults setObject:updatedArrayScores forKey:@"scoresArray"];
[self.defaults setObject:[self.defaults objectForKey:@"scoresArray"] forKey:@"scoresArray"];
[self.defaults synchronize];
NSLog(@"%@, %@", [self.defaults objectForKey:@"lastScore"], [self.defaults objectForKey:@"lastName"]);
NSLog(@"%i", [[self.defaults objectForKey:@"scoresArray"] count]);
[self dismissViewControllerAnimated:YES completion:nil];
} @end
오류가 보이지 않지만 코드에 두 가지 개선 사항을 제안합니다. 1) 배열의 다른 복사본을 만들고'updatedArrayScores'에 할당하는 단계는 불필요합니다.'updatedArray'를' NSUserDefaults'. 2) for [: self.defaults objectForKey : @ "scoresArray"] forKey : @ "scoresArray"];'문장을 완전히 삭제할 수 있습니다. – herzbube
'self.defaults'의 속성은 어떻게 설정되어 있습니까? 당신은 그것을 확실히 가지고 있습니까? 유지되지 않으면'setObject : forKey :'와 'synchonize' 메소드를 보내기 전에 해제되었을 수 있습니다. 그러면 자동으로 실패합니다. – lukestringer90