2011-11-20 128 views
1
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,它就不能工作。我该如何解决?gamecenter没有得到结果

+0

请把'在每一个句子的结尾.'。 – vikingosegundo

+0

除了可能的问题? –

+0

更多细节可能会有所帮助;你什么时候运行这段代码?也许它运行频繁? –

回答

1

当用户获得的分数恰好为300时,他们会得到一个成就,但如果他们超过300则无法工作。我该如何解决?

问题是您正在检查分数是否恰好为300;如果分数是(例如)302,则您显示的代码不会执行。您应该检查如果分数高于或等于300

GameCenterManager.m,在苹果的开发者中心提供一个例子,你可以阅读下面的注释(这是在开始的-submitAchievement:percentComplete:):

GameCenter会在提交成就时检查重复成就,但如果您只想向用户报告新成就,则需要在提交之前检查是否已获得成就。否则,您将以loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler之间的竞争状态结束。为了避免这种情况,我们一次性获取当前成就列表,然后缓存并随时更新任何新成就。

这意味着最终您可以报告已经从用户获得的成就;如果您使用的是loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler,则需要小心。
对于您的代码,这意味着您可以使用if (myScoreValue.value >= 300) { /*…*/ }