2012-10-24 32 views
3

所以,做很多的任何与排行榜数据有用,必须首先从取GKLeaderboardGKScore秒的数组,然后为每个得分取相应GKPlayer返回的数组顺序在+ [GKPlayer loadPlayersForIdentifiers:completionHandler:]

一旦你有了这个,你可能想要一个字典映射到球员得分或球员得分或playerID s得分value s或其他。因为我们已经有数组了,所以使用+[NSDictionary dictionaryWithObjects:forKeys:]来设置这样的字典会很好。

问题是:这些数组保证是在相同的顺序?即是它的安全做到以下几点:

GKLeaderboard *leaderboard = [[GKLeaderboard alloc] init]; 
[leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) { 
    NSArray *playerIDs = [scores valueForKey:@"playerID"]; 
    [GKPlayer loadPlayersForIdentifiers:playerIDs withCompletionHandler:^(NSArray *players, NSError *error) { 
     self.scores = [NSDictionary dictionaryWithObjects:scores forKeys:players]; 
    }]; 
}]; 

我知道[scores valueForKey:@"playerID"]会得到我的playerID秒的数组中的顺序相同比分 - (错误处理和ARC安全ommitted赘述。) - 这就是阵列上的valueForKey:应该做的事情。但loadPlayers的完成处理程序是否保证获取的玩家分数数组的顺序与输入顺序相同?我创建了一些沙箱帐户并完成了一些测试,看起来排序顺序总是匹配,但这不能保证。

文档不说任何方式。 (它确实表示在出现错误的情况下数组可能包含部分结果,在这种情况下,它显然不会映射到输入,但无错情况如何?)在playerID上排序这两个数组非常简单,当然,但是如果它总是被排序的话,不得不花费时间对数组进行排序,这真是一种耻辱。

回答

0

我想这是从方法名称相等,但它不是保证和实施细节。我想我不会依赖它。

我会再次调用排序..现在(因为它们已经排序),这将导致排序算法的最佳情况下运行...所以。上)。你会比任何情况下的圣人:)