Игровой центр GKTurnBasedMatch проблемы с свойством matchData

Я создаю игру Game Center с матчами GKTurnBasedMatch. У меня возникла проблема, когда свойство readonly matchData на GKTurnBasedMatch похоже не правильно хранится на серверах Game Center.

Я использую qaru.site/info/297649/... для создания контрольной суммы md5 на matchData NSData, как при отправке, так и при получении в Game Center серверы.

Я отмечаю контрольную сумму моего объекта данных игры NSData, когда я отправляю matchData с помощью метода экземпляра GKTurnBasedMatch endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:.

Затем противник извлекает совпадения с помощью метода GKTurnBasedMatch class loadMatchesWithCompletionHandler:, и когда совпадают совпадения (без ошибок), я снова отмечаю контрольную сумму.

Две контрольные суммы не совпадают, и полученные данные явно не идентичны на основе восстановленной игры. Я проверил в двух учетных записях, что свойство matchID на моих объектах GKTurnBasedMatch идентично.

Я также выполнил следующий тест:

NSLog(@"matchID: %@ matchData checksum: %@",
                    match.matchID, 
                    [Utilities md5StringFromData:match.matchData]);

// match is a valid `GKTurnBasedMatch` object.
[match endTurnWithNextParticipants: @[ opponent ] // My `GKTurnBasedParticipant` opponent
                       turnTimeout:600
                         matchData:data // This is a valid NSData object
                 completionHandler:^(NSError *error) {
                      if (nil != error) {

                          NSLog(@"%@", error);

                      } else {

NSLog(@"Successfully ended turn.");

[GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {

    if (nil != error) {

        NSLog(@"Error getting matches: %@", [error localizedDescription]);

    } else {

        for (GKTurnBasedMatch *match in matches) {

            NSLog(@"matchID: %@ matchData checksum: %@", 
                        match.matchID, 
                        [Utilities md5StringFromData:match.matchData]);

        }

    }
}];

                      }
}];

В этом примере, когда я заканчиваю поворот данными и сразу получаю совпадения из Game Center, данные совпадают. Однако, когда я обращаюсь к matchData из учетной записи и игрового центра противника, они отличаются.

Кто-нибудь столкнулся с чем-то вроде этого?

Ответ 1

Я нашел решение на Apple Dev Forums.

Оказывается, что loadMatchesWithCompletionHandler: не всегда захватывает самую последнюю версию matchData. Чтобы убедиться, что у вас самая последняя версия, убедитесь, что вы вызываете метод loadMatchDataWithCompletionHandler: на свой объект GKTurnBasedMatch.