2011-11-20 5 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 인 경우 표시되는 코드는 실행되지 않습니다.

: 점수가 GameCenterManager.m에서 300

, 애플의 개발자 센터에서 사용할 수있는 예 높거나 같은 경우 당신은 확인해야합니다, 당신은 (그것은 -submitAchievement:percentComplete:의 시작에있다) 다음과 같은 코멘트를 읽을 수 있습니다

GameCenter는 업적 제출시 중복 업적을 확인하지만 새 업적 만 사용자에게보고하려는 경우 제출하기 전에 적립되었는지 확인해야합니다. 그렇지 않으면 loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler 사이의 경쟁 조건으로 끝납니다. 이를 방지하기 위해 현재 업적 목록을 한 번 가져 와서 캐시하고 새로운 업적으로 업데이트 된 상태로 유지합니다.

이것은 결국 사용자가 이미 얻은 업적을보고 할 수 있음을 의미합니다. loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler을 사용하는 경우 조심해야합니다.
코드의 경우 if (myScoreValue.value >= 300) { /*…*/ }을 사용할 수 있음을 의미합니다.

관련 문제