游戏中心“指定的参与者没有所需的转弯状态”

时间:2013-06-22 13:42:03

标签: ios ios5 ios6 game-center gkturnbasedmatch

当我尝试在沙盒游戏中心回合制游戏中发送转弯时,我偶尔会收到以下错误。

  

错误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文档只包含消息中给出的文本。有人能指出我更详细地解释错误的地方吗?此外,“状态”是否表示其他设备上的参与者“状态”?

感谢。

1 个答案:

答案 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中找到了相同的解决方案,但是花了一些时间才意识到这是我需要的东西。

希望这有帮助,欢呼!