我现在正在与Game Center合作,我遇到了GC问题。 当我使用initWithPlayerIDs:时,在调用loadScoresWithCompletionHandler:callback时,我得不到任何分数。
GKLeaderboard *leaderBoard = [[[GKLeaderboard alloc] initWithPlayerIDs:[NSArray arrayWithObject:gcPlayerID]] autorelease];
leaderBoard.timeScope = GKLeaderboardTimeScopeAllTime;
leaderBoard.category = @"SomeLeaderboard";
[leaderBoard loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
if (error == nil)
{
// scores is null
// ...
}
但是当我在做的时候:
GKLeaderboard *leaderBoard = [[[GKLeaderboard alloc] init] autorelease];
leaderBoard.timeScope = GKLeaderboardTimeScopeAllTime;
leaderBoard.category = @"SomeLeaderboard";
[leaderBoard loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) {
if (error == nil)
{
for (GKScore* score in scores)
if ([score.playerID isEqualToString:gcPlayerID])
{
// Got something here
return;
}
}
它正在运作。
我现在正在使用第二种方法,但如果有很多分数,它会有时间处理。
有没有人有同样的问题?
感谢。
答案 0 :(得分:1)
我担心根据给定的信息,我无法回答为什么initWithPlayerIDs:
无效。但是,我可以在第二种方法中简化对本地玩家得分的过滤。 GKLeaderboard
的属性localPlayerScore
仅在loadScoresWithCompletionHandler:
完成后才有效。 localPlayerScore
然后为本地玩家提供GKScore
。你的第二种方法看起来像这样:
[leaderBoard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
if (error == nil)
{
GKScore* myScore = leaderboard.localPlayerScore;
}
}
希望这有点帮助。
答案 1 :(得分:1)
尝试将分数类型缩小到您真正想要处理的分数。例如,请求登录播放器的分数和全球时间范围等。
我在自己的游戏中使用类似下面的代码片段并且速度很快:
// Load score for player
GKLeaderboard *board = [[GKLeaderboard alloc] initWithPlayerIDs:[NSArray arrayWithObject:myGCPlayerID]];
board.timeScope = GKLeaderboardTimeScopeAllTime;
board.playerScope = GKLeaderboardPlayerScopeGlobal;
board.category = @"myGCCategory";
[board loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
if(error != nil) {
NSLog(@"Error loading score:\n%@", [error localizedDescription]);
}
if(scores != nil) {
for(int i=0; i<[scores count]; i++) {
GKScore *score = (GKScore *)[scores objectAtIndex:i];
if(([score.playerID isEqualToString:myGCPlayerID]) &&
(score.value > playerLastScore)) {
playerLastScore = score.value;
}
}
}
}];
[board release];
您也可以在代码中应用更优化的分数循环。我希望这会有所帮助。