3

そのため、リーダーボード データで有用なことを行うには、まずGKScoreからの配列を取得し、次に各スコアGKLeaderboardに対応する を取得する必要があります。GKPlayer

playerIDそれができたら、プレイヤーをスコアにマッピングしたり、スコアをプレイヤーやs からスコアsにマッピングしたりしたいかもしれませんvalue+[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];
    }];
}];

(簡潔にするために、エラー処理と ARC の安全性は省略されています。)

スコアと同じ順序[scores valueForKey:@"playerID"]で s の配列が得られることはわかっています。これが、配列で行うべきことです。しかし、取得したプレイヤー スコアの配列が入力と同じ順序になることを、完了ハンドラーは保証するのでしょうか? いくつかのサンドボックス アカウントを作成し、いくつかのテストを行ったところ、並べ替え順序は常に一致しているように見えますが、それは保証されていません。playerIDvalueForKey:loadPlayers

ドキュメントはどちらの方法でも何も言いません。(エラーの場合、配列は部分的な結果を含む可能性があると言っています。その場合、明らかに入力にマップされませんが、エラーのない場合はどうなりますか?) 両方の配列をplayerID、 of でソートするのは非常に簡単ですもちろん、配列が常に既にソートされている場合、配列のソートに時間を費やさなければならないのは残念です。

4

1 に答える 1

0

メソッド名から等しいと思いますが、保証されておらず、実装の詳細です。私はそれに頼らないと思います。

私は sort をもう一度呼び出します..今すぐ(すでにソートされているため)、ソートアルゴリズムの最適なランタイムが得られます...そうです。の上)。あなたはどんな場合よりも賢いでしょう:)

于 2012-12-08T09:22:20.263 に答える