我正在创建一个带有GKTurnBasedMatch匹配项的Game Center游戏。我遇到了一个问题,其中readonly上的matchData GKTurnBasedMatch属性似乎未正确存储在Game Center服务器上。

我正在使用this StackOverflow answer在gamt_code matchData上生成md5校验和,无论是在与Game Center服务器之间进行收发时。

当我使用NSData实例方法NSData发送matchData时,我注意到GKTurnBasedMatch游戏数据对象的校验和。

然后,对手使用endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:的类方法GKTurnBasedMatch检索匹配项,并且当匹配项到达时(没有错误),我再次记下校验和。

这两个校验和不匹配,并且基于重建的博弈,结果数据显然不相同。我已经 checkin 了两个帐户,我的loadMatchesWithCompletionHandler:对象上的matchID属性是相同的。

我还执行了以下测试:

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中检索了匹配项,即数据匹配项。但是,当我从对手的Game Center帐户和设备访问GKTurnBasedMatch时,它们是不同的。

有人遇到过这样的事情吗?

最佳答案

我在Apple's Dev Forums上找到了解决方案。

事实证明,loadMatchesWithCompletionHandler:并不总是捕获最新的matchData。为确保您拥有最新版本,请确保在loadMatchDataWithCompletionHandler:对象上调用GKTurnBasedMatch方法。

关于ios - 游戏中心GKTurnBasedMatch与matchData属性有关的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14735127/

10-10 22:38