Game Center属性中的Game Center GKTurnBasedMatch问题

时间:2013-02-06 17:26:17

标签: ios objective-c cocoa game-center gamekit

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

我使用this StackOverflow answermatchData NSData上生成md5校验和,无论是在向Game Center服务器发送还是从Game Center服务器接收时都是如此。

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

然后对手使用GKTurnBasedMatch的类方法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 个答案:

答案 0 :(得分:11)

我在Apple's Dev Forums上发现了解决方案。

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