2012-10-24 72 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

我想這是從方法名稱相等,但它不是保證和實施細節。我想我不會依賴它。

我會再次調用排序..現在(因爲它們已經排序),這將導致排序算法的最佳情況下運行...所以。上)。你會比任何情況下的聖人:)