几周前,我创建了一个在 iOS 5 上运行的基于回合制的 2 人游戏。
游戏允许玩家在自己的界面中从好友中选择一个对手,然后在呈现匹配视图时使用 GKMatchRequest 的 playerToInvite 属性,以使其自动邀请他们。
与在 iOS6 之前说它“什么都不做”的文档相反,这会导致 GKTurnBasedMatchmakerViewController 在 iOS5 上运行时自动选择所选玩家并开始邀请。
在请求返回时,在:
- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match
这个应用程序然后立即执行一个转弯并将其传递给下一个玩家。这会导致其他玩家的实际邀请随着轮到他们而发生,并且游戏从那里顺利进行。
上述委托调用中的 match.participants 都包含有效的 playerID 属性,使“nextParticipant”调用成为可能且有效。
到目前为止,一切都很好,在 iOS 5 上。
然而,在 iOS 6 上运行时,一切都照常进行,直到我们到达
- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match
并且我们发现第二个参与者的 playerID 为零,并且尝试将其设置为下一个参与者失败并出现“未知操作”。
进一步调查,如果我像往常一样启动匹配请求,但随后在 GC UI 中取消邀请,然后通过 GC UI 再次邀请,这一切都按预期工作。只有在自己设置 playerToInvite 时,邀请才会失败。我已经确认 playerID 在所有情况下都是正确的,除了 iOS6 上的虚假 nil。
请注意,在 iOS5 上运行时,这一切都正常运行。
在我看来,Apple 让它在 iOS5 中工作并声称它没有,然后在 iOS6 中打破它并声称它可以工作:)