【发布时间】:2014-05-19 16:35:08
【问题描述】:
我在网上学习了关于如何在 iOS 应用程序中使用 Game Center 的精彩教程。可以在这里找到:http://code.tutsplus.com/tutorials/ios-sdk-game-center-achievements-and-leaderboards-part-2--mobile-5801
但是提交成就的代码似乎解锁了已经解锁的成就,我不明白为什么。这是我处理成就的方法:
-(void)submitAchievement:(NSString*)identifier percentComplete:(double)percentComplete {
if (self.earnedAchievementCache == NULL) {
[GKAchievement loadAchievementsWithCompletionHandler: ^(NSArray *scores, NSError *error) {
if (error == NULL) {
NSMutableDictionary *tempCache = [NSMutableDictionary dictionaryWithCapacity: [scores count]];
for (GKAchievement *score in tempCache) {
[tempCache setObject: score forKey: score.identifier];
}
self.earnedAchievementCache = tempCache;
[self submitAchievement:identifier percentComplete: percentComplete];
}
else {
// Something broke loading the achievement list. Error out, and we'll try again the next time achievements submit.
[self callDelegateOnMainThread: @selector(achievementSubmitted:error:) withArg: NULL error: error];
}
}];
}
else {
// Search the list for the ID we're using...
GKAchievement *achievement = [self.earnedAchievementCache objectForKey:identifier];
if (achievement != NULL) {
if ((achievement.percentComplete >= 100.0) || (achievement.percentComplete >= percentComplete)) {
// Achievement has already been earned so we're done.
achievement = NULL;
}
achievement.percentComplete = percentComplete;
}
else {
achievement = [[[GKAchievement alloc] initWithIdentifier:identifier] autorelease];
achievement.percentComplete = percentComplete;
// Add achievement to achievement cache...
[self.earnedAchievementCache setObject:achievement forKey:achievement.identifier];
}
if (achievement != NULL) {
// Submit the Achievement...
[achievement reportAchievementWithCompletionHandler: ^(NSError *error) {
[self callDelegateOnMainThread:@selector(achievementSubmitted:error:) withArg:achievement error:error];
}];
}
}
}
感谢您抽出宝贵时间,丹。
【问题讨论】:
-
我不确定这是否会导致问题,但我认为您必须在 if 语句中使用 nil 而不是 NULL
-
我看到教程也有 NULL 但我阅读了一些 cmets 并且很多人发布他们在发布到游戏中心时遇到问题。
-
@Yan 我尝试将它们更改为 nil 但仍然不起作用嗯 :(
-
那意味着当成就已经完成时调用[成就reportAchievementWithCompletionHandler ...?
-
@Yan 是的,所以无论如何我都会调用那个方法......这很奇怪。它不应该调用成就已经完成,因为它不应该进入最后一个 if 语句..
标签: ios cocoa-touch game-center achievements