当我尝试在沙盒游戏中心回合制游戏中发送转弯时,我偶尔会收到以下错误。
错误Domain = GKErrorDomain Code = 23“由于指定的参与者没有所需的转弯状态,因此无法完成请求的操作。” UserInfo = 0x209e5110 {GKServerStatusCode = 5103,NSUnderlyingError = 0x209e56b0“操作无法完成.status = 5103,Session:4d278ed6-d546-4d31-bb6f-0a4ae89873aa当前转弯:8不符合预期:1”,NSLocalizedDescription =无法完成请求的操作,因为指定的参与者没有所需的转弯状态。
“当前转弯”和“预期”数字不同。我在两个设备之间发送,一个使用iOS5,另一个使用iOS6。我已使用以下行计算旧呼叫的折旧:
if([match respondsToSelector:@selector(endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:)]){
[match endTurnWithNextParticipants:@[nextParticipant] turnTimeout:inval matchData:data completionHandler:completeEndTurn];
}
else{
[match endTurnWithNextParticipant:nextParticipant matchData:data completionHandler:completeEndTurn];
}
输入参数“看起来”是正确的,但我看不到任何明显的错误。但是,我真的不明白错误信息。我试图通过搜索找到更多,但找不到任何解释错误的内容。 Apple文档只包含消息中给出的文本。有人能指出我更详细地解释错误的地方吗?此外,“状态”是否表示其他设备上的参与者“状态”?
感谢。
答案 0 :(得分:3)
在我的情况下,这个错误是由于我使用不正确的(旧)匹配对象来结束转弯。显然,此对象在游戏过程中会发生变化,您需要使用handleTurnEventForMatch在每次调用时获得的内容来更新存储的匹配实例。 像Ray said,
- (void) handleTurnEventForMatch:(GKTurnBasedMatch *)match
{
NSLog(@"Turn has happened");
if ([match.matchID isEqualToString:currentMatch.matchID])
{
...
self.currentMatch = match; // <-- renew your instance!
...
}
}
所以,当我开始使用最新的currentMatch来结束转弯时 - 错误就消失了。
我也在comment中找到了相同的解决方案,但是花了一些时间才意识到这是我需要的东西。
希望这有帮助,欢呼!