我正在使用GKTurnBasedMatch
个匹配创建一个游戏中心游戏。我遇到问题,readonly
上的matchData
GKTurnBasedMatch
属性似乎没有正确存储在Game Center服务器上。
我使用this StackOverflow answer在matchData
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
时,它们会有所不同。
有人遇到过这样的事吗?
答案 0 :(得分:11)
我在Apple's Dev Forums上发现了解决方案。
事实证明,loadMatchesWithCompletionHandler:
并不总是抓住最新的matchData
。要确保您拥有最新版本,请务必在loadMatchDataWithCompletionHandler:
对象上调用GKTurnBasedMatch
方法。