2013-10-02 55 views
4

香港专业教育学院更新我的应用程序的IOS 7和游戏中心已弃用,如装载和解聘排行榜和成就如何解决他们的几件事情,它说GKLeaderboardViewController已被弃用我应该使用iOS7中的什么来代替已弃用的GKLeaderboardViewController?

- (IBAction)LeaderBoardsButton:(id)sender { 
GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init]; 
if (leaderboardController != NULL) 
{ 
    leaderboardController.leaderboardDelegate = self; 
    [self presentViewController:leaderboardController animated:YES completion:NULL]; 
} 
{ 
    AudioServicesPlaySystemSound(SoundID); 
} 
} 

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController 
{ 
[self dismissViewControllerAnimated:YES completion:NULL]; 
{ 
    AudioServicesPlaySystemSound(SoundID2); 
} 
} 

- (IBAction)AchievementsButton:(id)sender { 
GKAchievementViewController *achievements = [[GKAchievementViewController 
               alloc] init]; 
if (achievements != nil) 
{ 
    achievements.achievementDelegate = self; 
    [self presentViewController:achievements animated:YES completion:NULL]; 
} 
{ 
    AudioServicesPlaySystemSound(SoundID); 
} 
} 

- (void)achievementViewControllerDidFinish:(GKAchievementViewController 
             *)viewController 
{ 
[self dismissViewControllerAnimated:YES completion:NULL]; 
{ 
    AudioServicesPlaySystemSound(SoundID2); 
} 
} 

我要报告的分数是这样

- (IBAction)ShareScore:(id)sender { 
[self.gameCenterManager reportScore: counter forCategory: self.currentLeaderBoard]; 

GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init]; 
if (leaderboardController != NULL) 
{ 
    leaderboardController.category = self.currentLeaderBoard; 
    leaderboardController.timeScope = GKLeaderboardTimeScopeToday; 
    leaderboardController.leaderboardDelegate = self; 
    [self presentViewController:leaderboardController animated:YES completion:NULL]; 
} 
{ 
    AudioServicesPlaySystemSound(SoundID); 
} 
} 

回答

23

的iOS 7结合了排行榜,成绩等控制器一起放入GKGameCenterViewController类。您可以使用viewState参数来控制要显示的视图。

你会想要做这样的事情来呈现/关闭该排行榜:

- (void) presentLeaderboards { 
    GKGameCenterViewController* gameCenterController = [[GKGameCenterViewController alloc] init]; 
    gameCenterController.viewState = GKGameCenterViewControllerStateLeaderboards; 
    gameCenterController.gameCenterDelegate = self; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

- (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController*) gameCenterViewController { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

同样,对于展示成就,你可以这样做:

- (void) presentAchievements { 
    GKGameCenterViewController* gameCenterController = [[GKGameCenterViewController alloc] init]; 
    gameCenterController.viewState = GKGameCenterViewControllerStateAchievements; 
    gameCenterController.gameCenterDelegate = self; 
    [self presentViewController:gameCenterController animated:YES completion:nil]; 
} 

报告得分看起来会像这样:

- (void) reportHighScore:(NSInteger) highScore forLeaderboardId:(NSString*) leaderboardId { 
    if ([GKLocalPlayer localPlayer].isAuthenticated) { 
     GKScore* score = [[GKScore alloc] initWithLeaderboardIdentifier:leaderboardId]; 
     score.value = highScore; 
     [GKScore reportScores:@[score] withCompletionHandler:^(NSError *error) { 
      if (error) { 
       NSLog(@"error: %@", error); 
      } 
     }]; 
    } 
} 
+0

嗨格里格工作完美我编辑了问题,因为我错过了报告分数部分我将如何解决? – Azabella

+0

我怎么会触发无效声明,因为我希望在比赛结束就引发,当他们提交有得分 – Azabella

+1

你是说你怎么骂的reportHighScore:forLeaderboardId:方法?这将类似于你在上面写的这一行:[self.gameCenterManager reportScore:counter forCategory:self.currentLeaderBoard] ;.相反,你会做一些像[self reportHighScore:counter forLeaderboardId:self.currentLeaderBoard] ;. – Greg

相关问题