Когда пользователь получает оценку ровно 300, он получает достижение, но оно не работает, если он превышает 300. Как это исправить?
Проблема в том, что вы проверяете, равен ли счет в точности 300; если счет (например) 302, показанный вами код не выполняется. Вы должны проверить, является ли оценка выше или равна 300.
В GameCenterManager.m , примере, доступном в центре разработчиков Apple, вы можете прочитать следующий комментарий (он находится в начале -submitAchievement:percentComplete:
):
GameCenter проверяет наличие дубликатов достижений при отправке достижения, но если вы хотите только сообщать о новых достижениях пользователю, то перед отправкой вам необходимо проверить, заработаны ли они. В противном случае вы получите состояние гонки между loadAchievementsWithCompletionHandler
и reportAchievementWithCompletionHandler
. Чтобы избежать этого, мы извлекаем текущий список достижений один раз, затем кэшируем его и обновляем его с учетом всех новых достижений.
Это означает, что в конечном итоге вы можете сообщить о достижении, которое уже было получено от пользователя; это нужно делать осторожно, если вы используете loadAchievementsWithCompletionHandler
и reportAchievementWithCompletionHandler
.
Для вашего кода это означает, что вы можете использовать if (myScoreValue.value >= 300) { /*…*/ }
.