Порядок возвращенного массива в +[GKPlayer loadPlayersForIdentifiers:completionHandler:]

Таким образом, чтобы сделать что-то полезное с данными таблицы лидеров, нужно сначала получить массив GKScores из GKLeaderboard, а затем получить соответствующие GKPlayers для каждого результата.

Когда у вас это есть, вы можете захотеть иметь словарь, отображающий игроков на очки или очки на игроков, или playerIDs на values, или что-то в этом роде. И было бы неплохо настроить такой словарь с помощью +[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"] даст мне массив из playerID в том же порядке, что и баллы — это то, что должен делать valueForKey: в массиве. Но гарантирует ли обработчик завершения из loadPlayers, что массив полученных результатов игроков будет в том же порядке, что и входные данные? Я создал несколько учетных записей песочницы и провел несколько тестов, и оказалось, что порядок сортировки всегда совпадает, но это не гарантия.

Документация ни о чем не говорит. (Он говорит, что массив может содержать частичные результаты в случае ошибки, и в этом случае он, очевидно, не будет отображаться на входе, но как насчет случая без ошибок?) Довольно просто отсортировать оба массива по playerID, конечно, но было бы обидно тратить время на сортировку массива, если он всегда будет уже отсортирован.


person rickster    schedule 24.10.2012    source источник


Ответы (1)


Я бы предположил, что это равно из имени метода, НО это не гарантируется и является деталью реализации. Я бы не стал полагаться на это, я думаю.

Я бы снова вызвал сортировку ... прямо сейчас (поскольку они уже отсортированы), что привело бы к наилучшему времени выполнения алгоритма сортировки ... так что. на). Вы были бы мудрее, чем в любом случае :)

person Daij-Djan    schedule 08.12.2012