Чрезвычайно Простая Сохраненная Высокая Оценка - PullRequest
0 голосов
/ 13 августа 2011

Игра, которую я создаю, имеет целочисленную переменную highScore, которая присваивается, когда игрок проигрывает. Я использую класс NSUsersDefaults, чтобы сохранить мой высокий балл. Вот мой код, который я использую:

-(void)saveScore {
    [[NSUserDefaults standardUserDefaults] setInteger:score forKey:@"highScore"];
    [defaults setInteger:score forKey:@"highScore"];
    [defaults synchronize];
    NSLog(@"High Score: %i ", highScore);
}


-(IBAction)buttonReleased:(id)sender {


[stopWatchTimer invalidate];
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

NSString *label0 = @"Hold to Start";
[labelText setText:label0];

if (score > 0) {
    score--;
}

else {
    score = 0;
    NSLog(@"Changed score to 0");
}




if (score > highScore) {


    [self saveScore];

    NSString *scoreMessage =[[NSString alloc] initWithFormat:@"Congrats! You have a new High Score! Click Share High Score to share your score of: %i",score];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"High Score!" message:(NSString *)scoreMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];




    [alert show];
    [alert release];

    score = 0;
}

else {


    NSString *scoreMessage =[[NSString alloc] initWithFormat:@"Game Over! Your score was: %i",score];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"GAME OVER!" message:(NSString *)scoreMessage delegate:nil cancelButtonTitle:@"Try Again" otherButtonTitles: nil];

    [alert show];
    [alert release];

    score = 0;
}


- (void)viewDidLoad
{


    [super viewDidLoad];

    int highscore = [[NSUserDefaults standardUserDefaults] integerForKey: @"highScore"];

    [stopWatchTimer invalidate];
    stopWatchTimer=nil;




}

Я боролся с этим в течение ЧАСОВ! Что я делаю неправильно?! Примечание. Можете ли вы объяснить это как можно проще?

Спасибо! Матф

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

Чтение:

int highscore = [[NSUserDefaults standardUserDefaults] integerForKey: @"highScore"];

Скорее всего, это будет значение по умолчанию int (то есть 0), когда файл пуст.

Также не забудьте форсировать записьиз ваших значений по умолчанию «disk» с помощью synchronize:

-(void)saveScore {
    NSUSerDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:score forKey:@"highScore"];
    [defaults synchronize];
}

Вы можете загрузить рекорд в viewDidLoad или даже в вашем методе init (или initWithNibName), поскольку эта часть не зависит от загрузки вашего представления.

Вы можете объявить свойство в своем представлении Scores, которое вы установили в методе viewDidLoad.В качестве альтернативы вы можете указать UILabel этого класса оценки (если это то, что вы используете) в качестве свойства вашего класса оценки.

- (void)viewDidLoad:
{
...
self.scoresView.textLabel.text = [NSString stringWithFormat:@"%d", highScore];
...
}
1 голос
/ 20 октября 2011

Существует действительно простая система управления рекордами, о которой я написал, даже есть онлайн-поддержка. Вы можете найти это https://github.com/faizanaziz/HighScore

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