Tim*_*ber 11 cocoa objective-c gamekit ios game-center
我正在用GKTurnBasedMatch匹配创建一个游戏中心游戏.我遇到的问题是,a上的readonly matchData属性GKTurnBasedMatch似乎没有正确存储在Game Center服务器上.
我正在使用此StackOverflow应答来生成md5校验和matchData NSData,无论是在向Game Center服务器发送还是从Game Center服务器接收时.
NSData当我matchData使用GKTurnBasedMatch实例方法发送时,我注意到我的游戏数据对象的校验和endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:.
然后对手使用GKTurnBasedMatch's 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]);
}
}
}];
}
}];
Run Code Online (Sandbox Code Playgroud)
在这个示例中,我用数据结束转弯并立即从Game Center检索匹配,数据匹配.但是,当我matchData从对手的Game Center帐户和设备访问时,它们会有所不同.
有人遇到过这样的事吗?
Tim*_*ber 11
我在Apple的Dev论坛上发现了解决方案.
事实证明,loadMatchesWithCompletionHandler:并不总是抓住最新的matchData.要确保您拥有最新版本,请确保loadMatchDataWithCompletionHandler:在GKTurnBasedMatch对象上调用该方法.