ios6 - iOS 6 GKMatchRequest playersToInvite 失败,GKTurnBasedParticipant 中的 playerID 为 nil(适用于 iOS5)

标签 ios6 game-center multiplayer

几周前,我创建了一个运行在 iOS 5 上的 TurnBased 2 人游戏。

游戏允许玩家从自己的界面中选择他们的 friend 中的对手,然后在呈现匹配 View 时使用 GKMatchRequest 的 playersToInvite 属性,以使其自动邀请他们。

与 iOS6 之前“什么都不做”的文档相反,这会导致 GKTurnBasedMatchmakerViewController 在 iOS5 上运行时自动选择所选玩家并开始邀请。

请求返回时,在:

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 

此应用程序然后立即执行转弯并将其传递给下一个玩家。 这会导致其他玩家在轮到他们时发生实际邀请,游戏从那里顺利进行。

上面委托(delegate)调用中的 match.participants 都包含有效的 playerID 属性,使“nextParticipant”调用成为可能且有效。

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

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

- (void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 

我们发现第二个参与者的 playerID 为 nil,尝试将其设置为下一个参与者失败并显示“未知操作”。

进一步调查,如果我像往常一样开始匹配请求,然后在 GC UI 中取消邀请,然后通过 GC UI 再次邀请,一切都按预期进行。只有当我自己设置 playersToInvite 时,邀请才会失败。我已经确认 playerID 在所有情况下都是正确的,除了 iOS6 上的虚假 nil。

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

在我看来,Apple 使它在 iOS5 中工作并声称它没有,然后在 iOS6 中破坏它并声称它工作:)

最佳答案

以防万一这对某人有用:

我通过添加针对 iOS6 的特定实现解决了这个问题。 因此,在邀请玩家时,不要像在 iOS5 中那样启动 MatchMakerVC,而是以编程方式执行。

[GKTurnBasedMatch findMatchForRequest: request withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)

这实际上比在 iOS5 中效果更好,因为您可以避免强制用户点击“下一步”3 次。

我仍然认为最初的问题是一个错误,在这里浪费了我 50 点声望,但我们继续生活,学习,忘记并再次学习:)

关于ios6 - iOS 6 GKMatchRequest playersToInvite 失败,GKTurnBasedParticipant 中的 playerID 为 nil(适用于 iOS5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567830/

相关文章:

ios - 如何判断 NSURLCache 是否正常工作?

ios - 使用 Game Center 中新的 rematch WithCompletionHandler 方法时遇到问题

ios - 除非另有说明,否则所有 iOS GameCenter 回调都在主线程上执行吗?

c# - Unity多人游戏玩家数量不匹配

flash - 谷歌应用引擎可以用作套接字服务器吗?

c++ - 多人游戏服务器模型——世界复制和对象更新

来自 JSON 文件的 iOS 6 NSDictionary

ios6 - iOS 6,SDWebImage 成功/失败 block 错误。不兼容的 block 指针类型?

objective-c - Collection View 布局

ios - GKMatch expectedPlayerCount 始终为 1