Ios6 iOS 6 GKMatchRequest PlayerToInvite失败,GKTurnBasedParticipant中的playerID为零(工作iOS5)

Ios6 iOS 6 GKMatchRequest PlayerToInvite失败,GKTurnBasedParticipant中的playerID为零(工作iOS5),ios6,game-center,multiplayer,Ios6,Game Center,Multiplayer,几周前,我在iOS5上创建了一个基于TurnBased的2人游戏 游戏允许玩家从自己的界面从朋友中选择对手,然后在显示match making视图时使用GKMatchRequest的PlayerToInVite属性,以使其自动邀请他们 与iOS6之前的文档中所说的“不做任何事情”相反,这会导致GKTurnBasedMatchmakerViewController在iOS5上运行时自动选择所选的播放器并启动邀请 在返回请求时,在: - (void)turnBasedMatchmakerViewCo

几周前,我在iOS5上创建了一个基于TurnBased的2人游戏

游戏允许玩家从自己的界面从朋友中选择对手,然后在显示match making视图时使用GKMatchRequest的PlayerToInVite属性,以使其自动邀请他们

与iOS6之前的文档中所说的“不做任何事情”相反,这会导致GKTurnBasedMatchmakerViewController在iOS5上运行时自动选择所选的播放器并启动邀请

在返回请求时,在:

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 
然后,该应用程序立即执行一个回合并将其传递给下一个玩家。 这会导致其他玩家在轮到他们的时候出现实际的邀请,并且游戏会从那里顺利进行

上述委托调用中的match.participant都包含有效的playerID属性,使得“nextParticipant”调用成为可能且有效

到目前为止,在iOS 5上一切都很好

然而,当在iOS 6上运行时,一切都会照常进行,直到我们达到目标

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 
我们发现第二个参与者有一个nil playerID,并且试图将其设置为下一个参与者失败,导致“未知操作”

进一步研究,如果我像往常一样启动匹配请求,但在gcui中取消邀请,然后通过gcui再次邀请,那么一切都会按预期进行。只有在将玩家设置为“邀请自己”时,邀请才会失败。我已经确认玩家ID在所有情况下都是正确的,除了iOS6上的假零

请注意,在iOS5上运行时,这一切都会正常运行


在我看来,苹果在iOS5中实现了它,并声称它没有,然后在iOS6中打破了它,声称它可以工作:)

以防万一这对某人有用:

我通过添加iOS6的具体实现解决了这个问题。 因此,当邀请玩家时,不要像iOS5那样启动MatchMakerVC,而是以编程方式进行

[GKTurnBasedMatch findMatchForRequest: request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)
这实际上比在iOS5中工作得更好,因为您可以避免强迫用户点击“下一步”3次

<>我仍然认为原来的问题是一个错误,它浪费了我50的声誉,在这里浪费了慷慨,但我们去了,我们生活,学习,忘记和学习: