AFIK そのような解決策はありません。GameCenter はプレイヤーのベストスコアのみを保存します。
これを読む
したがって、本当にそれをやりたい場合は、プレーヤーを自分でランク付けする必要があります。
- リーダー ボードからすべてのスコアを取得します。
- 現在のスコアのランクを確認します。
-以下のサンプルコード
-(void) findRankWithScore: (int64_t)score
{
GKLeaderboard *leaderboard = [[GKLeaderboard alloc] init];
if (leaderboard != nil) {
leaderboard.category = @"YourCategory";
leaderboard.timeScope = GKLeaderboardTimeScopeWeek; //or all time, day... pick one.
[leaderboard loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
int rank = 0;
if (error == nil && scores != nil) {
for (GKScore* refScore in scores) {
//NOTE: Retrieved score array is sorted already.
if (refScore.value <= score) {
rank = refScore.rank - 1;
if (rank < 1) {
rank = 1;
}
break;
}
}
//show the rank to player. using delegate, notification, popups etc...
}else {
//handle errors
}
}];
}
}
また、ランク結果ごとに GameCenter からすべてのスコアを取得するには、多くのコストがかかりました。
そのため、スコア配列を保存して再利用することをお勧めします。ただし、ランキングの精度は多少犠牲になります。(そして、スコア配列をある時間間隔またはそのようなもので更新します)