我在尝试将游戏中心成就实现到iOS游戏时遇到了一些问题。游戏已经有玩家认证和排行榜设置,他们工作正常。我得到的第一个错误是使用这种方法:
GKAchievementDescription.loadAchievementDescriptionsWithCompletionHandler
它给了我一个错误,其中说明了两件事:
iTunes连接已经增加了五项成就,所以我不知道它为什么不支持它们。其他问题是我使用这种方法时:
GKAchievement.reportAchievements
当调用它时,完成处理程序中的错误为nil,但它返回"没有bundleID的束:(null)"。成就横幅没有显示,游戏中心视图中没有成就标签。
该应用程序最近被转移到另一个开发人员,但他后来想要添加一些额外的功能,所以我使用他提供的配置文件和开发人员证书,这样我就可以正确地测试游戏中心和应用程序购买。看来我遇到的问题与转移有关吗?
所以我的问题是导致游戏“不支持成就”的问题可能是什么?
非常感谢任何帮助, 谢谢。
答案 0 :(得分:0)
你的问题有点模糊,这两种方法在你的代码中是如何准确的。很难用两行函数来帮助
您加载代码应该看起来像这样
/// Load achievements
func loadAchievements(){
print("Loading submitted achievements")
GKAchievement.loadAchievementsWithCompletionHandler( { (achievements, error:NSError?) -> Void in
guard error == nil else {
print("Error loading achievements progress: \(error)")
return
}
guard let validAchievements = achievements else { return }
for achievement in validAchievements {
print("Name: \(achievement.identifier)")
print("Percentage: \(achievement.percentComplete)")
print("Date: \(achievement.lastReportedDate)")
self.achievementsDict.updateValue(achievement, forKey: achievement.identifier!)
}
})
}
您报告的代码应该类似于此
/// Save achievement progress
func reportAchievementProgress(percent: Double, achievementID: String) {
guard self.localPlayer.authenticated else { return }
let achievement = self.checkAchievement(achievementID) as GKAchievement? //
if achievement != nil {
achievement!.percentComplete = percent
achievement!.showsCompletionBanner = true
GKAchievement.reportAchievements([achievement!], withCompletionHandler: { (error:NSError?) -> Void in
guard error == nil else {
print(error)
return
}
print("Reported achievement: \(achievementID)) to: \(percent) %")
})
}
}
/// Check achievement
private func checkAchievement(achievementID: String) -> GKAchievement {
var achievement = self.achievementsDict[achievementID]
if achievement == nil {
print("Achievement with no previous progress, saving...")
achievement = GKAchievement(identifier: achievementID)
self.achievementsDict.updateValue(achievement!, forKey: achievement!.identifier!)
}
return achievement!
}
achievementDict是一个字典,用于缓存您的成就。
var achievementsDict = [String: GKAchievement]()
这有帮助吗?