GameCenter не получает результат - PullRequest
1 голос
/ 20 ноября 2011
 if(myScoreValue.value==300)//achievement for getting 300 points.
{
    GKAchievement *achievement= [[GKAchievement alloc] initWithIdentifier:@"Score4"];
    achievement.percentComplete = 100.0;
    achievement.showsCompletionBanner=YES;
    if(achievement!= NULL)
    {
        [achievement reportAchievementWithCompletionHandler: ^(NSError *error)
         {
             if(error != nil){
                 NSLog(@"Achievement failed");
             } else {
                 NSLog(@"Achievement Success");
             }
         }];
    }
}

Когда пользователь получает оценку ровно 300, он получает достижение, но оно не работает, если он превышает 300. Как мне это исправить?

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Когда пользователь получает оценку ровно 300, он получает достижение, но оно не работает, если он превышает 300. Как это исправить?

Проблема в том, что вы проверяете, равен ли счет в точности 300; если счет (например) 302, показанный вами код не выполняется. Вы должны проверить, является ли оценка выше или равна 300.

В GameCenterManager.m , примере, доступном в центре разработчиков Apple, вы можете прочитать следующий комментарий (он находится в начале -submitAchievement:percentComplete:):

GameCenter проверяет наличие дубликатов достижений при отправке достижения, но если вы хотите только сообщать о новых достижениях пользователю, то перед отправкой вам необходимо проверить, заработаны ли они. В противном случае вы получите состояние гонки между loadAchievementsWithCompletionHandler и reportAchievementWithCompletionHandler. Чтобы избежать этого, мы извлекаем текущий список достижений один раз, затем кэшируем его и обновляем его с учетом всех новых достижений.

Это означает, что в конечном итоге вы можете сообщить о достижении, которое уже было получено от пользователя; это нужно делать осторожно, если вы используете loadAchievementsWithCompletionHandler и reportAchievementWithCompletionHandler.
Для вашего кода это означает, что вы можете использовать if (myScoreValue.value >= 300) { /*…*/ }.

0 голосов
/ 12 апреля 2012

Вот мое предложение.

Прочтите этот официальный документальный фильм Apple в качестве справочного пособия http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKAchievement_Ref/Reference/Reference.html

   OR

Вот очень полезный источник из GitHub - в списке TypeOneError http://www.typeoneerror.com/articles/post/game-center-achievement-notification

...