1 year ago
#2357
Vahe Hayrapetyan
GKAchievement.loadAchievements is always returning an empty array
GKAchievement.loadAchievements
is always returning an empty array. It's authenticated with the local player, and GKAchievement.report
works perfectly. I'm able to see the unlocked achievement in the Game Center.
Auth
func authPlayer(){
let localPlayer = GKLocalPlayer.local
localPlayer.authenticateHandler = {
(view,error) in
if view != nil {
self.present(view!, animated: true, completion: nil)
}
else {
print(GKLocalPlayer.local.isAuthenticated)
}
}
}
Loading achievements
static func loadAchievements() {
GKAchievement.loadAchievements(completionHandler: { achievements, error in
if error != nil {
print("Failed to load achievments", error as Any)
return
}
for achievement in achievements! { // this is always an empty array
let characterType = self.achievements[achievement.identifier]
if characterType != nil && achievement.isCompleted {
self.saveCharacterUnlock(character: .rabbit, type: characterType!)
}
}
})
}
Saving an achievement
static private func saveCharacterAchievement(type: Int) {
let achievementName = achievements.first(where: { key, value in return value == type })?.key
guard achievementName != nil else {
return
}
let achievement = GKAchievement.init(identifier: achievementName!)
achievement.percentComplete = 100
GKAchievement.report([achievement], withCompletionHandler: {
error in
if error != nil {
print("Failed to save achievement", error as Any)
}
})
}
swift
game-center
achievements
0 Answers
Your Answer