情景描述:
下面方法的功能是拿到GameCenter某个排行榜本地玩家的分数
- (void) getScoreData:(NSString*)rID{
GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init];
if (leaderboardRequest != nil)
{
leaderboardRequest.playerScope = GKLeaderboardPlayerScopeGlobal;
leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime;
leaderboardRequest.range = NSMakeRange(1,10);
leaderboardRequest.category = rID;
[leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
if (error != nil){
// handle the error.
NSLog(@"下载失败");
}
if (scores != nil){
score = (int)leaderboardRequest.localPlayerScore.value;
}
}];
}
}
-(int)getScore{
return score;
}
调用方法拿到数据:
getScoreData;
getScore;
得到的结果:score = 0,没有拿到数据?
分析:
[leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
里面的block回调loadScoresWithCompletionHandler
有延迟不会立马执行,我们分数score = (int)leaderboardRequest.localPlayerScore.value;
获得是在这个方法里
解决办法:
getScoreData;
这两个方法分开调用,不要写在一起
getScore;