我正在创建一个带有GKTurnBasedMatch
比赛的游戏中心游戏。我遇到了一个问题,a 上的readonly
matchData
属性GKTurnBasedMatch
似乎没有正确存储在 Game Center 服务器上。
我正在使用这个 StackOverflow 答案在 上生成一个 md5 校验和matchData
NSData
,无论是在发送到游戏中心服务器还是从游戏中心服务器接收时。
当我使用实例方法发送时,我注意到我的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
从对手的 Game Center 帐户和设备访问时,它们会有所不同。
有人遇到过这样的事情吗?