所以,做很多的任何與排行榜數據有用,必須首先從取GKLeaderboard
的GKScore
秒的數組,然後爲每個得分取相應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
上排序這兩個數組非常簡單,當然,但是如果它總是被排序的話,不得不花費時間對數組進行排序,這真是一種恥辱。