如何从Game Center获得本地球员得分

use*_*693 7 iphone objective-c gamekit game-center ios7

如何从排行榜游戏中心获得本地玩家的分数?我尝试了这个代码,但它没有返回任何内容.有人知道如何解决它,或者有更好的方法来获得分数?

- (NSString*) getScore: (NSString*) leaderboardID
{
    __block NSString *score;
    GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
    if (leaderboardRequest != nil)
    {
        leaderboardRequest.identifier = leaderboardID;

        [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
            if (error != nil)
            {
                NSLog(@"%@", [error localizedDescription]);
            }
            if (scores != nil)
            {
                int64_t scoreInt = leaderboardRequest.localPlayerScore.value;
                score = [NSString stringWithFormat:@"%lld", scoreInt];
            }
        }];
    }
    return score;
}
Run Code Online (Sandbox Code Playgroud)

我想,那个方法必须等待[leaderboardRequest loadScoresWithCompletionHandler:...完成

可能吗?

小智 6

您的代码似乎没有我能看到的任何错误.我建议显示标准排行榜界面,以查看报告分数的代码是否实际正常工作.如果是这样,您应该在排行榜中看到分数.下面的代码适用于我的游戏,我知道得分报告工作正常,因为它显示在默认的游戏中心UI中.

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
leaderboardRequest.identifier = kLeaderboardCoinsEarnedID;
[leaderboardRequest loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
    if (error) {
        NSLog(@"%@", error);
    } else if (scores) {
    GKScore *localPlayerScore = leaderboardRequest.localPlayerScore;
    CCLOG(@"Local player's score: %lld", localPlayerScore.value);
    }
}];
Run Code Online (Sandbox Code Playgroud)

如果您不确定如何,下面的代码应该可以显示默认排行榜(iOS7):

 GKGameCenterViewController *gameCenterVC = [[GKGameCenterViewController alloc] init];
 gameCenterVC.viewState = GKGameCenterViewControllerStateLeaderboards;
 gameCenterVC.gameCenterDelegate = self;
 [self presentViewController:gameCenterVC animated:YES completion:^{
      // Code
 }];
Run Code Online (Sandbox Code Playgroud)