在我的应用程序中,我试图将 GameCenter 玩家 ID 转换为他们的别名。收到 ID 后,我会从循环中调用以下方法。该方法一次使用一个 id 调用,并且应该返回一个别名。我只是想返回一个别名,但无法让它工作。起初我把退货放在块里,但我发现你不能在里面退货。现在我已经设置好了,所以它将对象添加到数组并在块之后返回,但是它给了我以下错误:[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'。任何帮助将不胜感激。
@property (nonatomic, strong, retain) NSMutableArray * playerScores;
.
-(void)getScoresAndAliasForLeaderboard{
[GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *nsError) {
if( nsError != nil )
{
//error( nsError, "get leaderboard score" ) ;
return ;
}
for( GKLeaderboard* board in leaderboards )
{
board.timeScope = GKLeaderboardTimeScopeAllTime;
board.playerScope = GKLeaderboardPlayerScopeGlobal;
board.range = NSMakeRange(1, 100);
[board loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
NSLog(@"board: %@",board.description);
NSLog(@"error: %@",error);
if (error == nil)
{
for (GKScore *s in scores)
{
GCLeaderboardScore *playerScore = [[GCLeaderboardScore alloc] init];
playerScore.playerID = s.playerID;
playerScore.score = (int)s.value;
playerScore.rank = s.rank;
NSArray * player = [[NSArray alloc]initWithObjects:s.playerID, nil];
[self loadPlayerData:player];
playerScore.alias = [_playerScores objectAtIndex:0];
NSLog(@"alias: %@, score: %d",playerScore.alias ,playerScore.score);
[_dataMutableArray addObject: playerScore];
}
[self.tableView reloadData];
}
}];
}
}] ;
}
.
-(NSString*) loadPlayerData: (NSArray *) identifiers
{
if(!_playerScores){
_playerScores = [[NSMutableArray alloc]init];
}
[GKPlayer loadPlayersForIdentifiers:identifiers withCompletionHandler:^(NSArray *players, NSError *error)
{
if (error != nil)
{
// Handle the error.
}
if (players != nil)
{
GKPlayer* player = [players objectAtIndex:0];
[_playerScores addObject:player.alias];
}
}];
return [_playerScores objectAtIndex:0];
}