iphone - 在没有游戏中心 View Controller 的情况下处理对 GKTurnBasedMatch 的邀请

标签 iphone ios game-center gamekit gkturnbasedmatch

我正在开发一个简单的回合制文字游戏,但我很难弄清楚邀请的运作方式。当用户 A 邀请用户 B 玩游戏时,我希望用户 B 能够在我的自定义比赛界面(即列出用户 B 的所有游戏的屏幕)中看到该游戏。如果用户 B 在被邀请参加游戏时点击通知,一切都很好,但如果用户 B 只是自己导航到应用程序,我仍然希望通过我自己的界面可以看到游戏。

每当出现此匹配界面屏幕时,我都会使用 [GKTurnBasedMatch loadMatchesWithCompletionHandler:] 获取所有本地玩家的匹配。有了这个,我假设用户 B 将能够看到他被邀请参加的比赛,但这个新比赛没有出现。如果我通过 GKTurnBasedMatchmakerViewController 接受邀请,用户会按预期进入游戏,但更令人费解的是,如果我打开我的 GKTurnBasedMatchmakerViewController 然后取消而不接受邀请后,一个新的匹配出现在我的自定义匹配界面中,但它缺少用户 A 发送的匹配数据。

总而言之,我真的只是想知道如何使用自定义界面正确显示和接受 GKTurnBasedMatch 邀请(而不是必须使用 GKTurnBasedMatchmakerViewController)。谢谢!

最佳答案

这个问题似乎有几个人感兴趣,所以这里是我最终所做的粗略估计。

首先,新比赛根本没有出现的原因只是我没有调用 [GKTurnBasedMatch loadMatchesWithCompletionHandler:] 每次我想要刷新 View 时,虽然我曾是。所以我记得那里没有真正的问题。

真正的问题是我正在接收并显示新的 GKTurnBasedMatch,但没有任何数据(即对方玩家的第一步)可用。本质上,[GKTurnBasedMatch loadMatchesWithCompletionHandler:] 似乎并不能保证为您提供最新的可用 GKTurnBasedMatch 对象。为了确保匹配是最新的,我还必须在 [GKTurnBasedMatch loadMatchesWithCompletionHandler:] 返回的每个匹配上调用 [match loadMatchDataWithCompletionHandler:](其中 match 是 GKTurnBasedMatches 之一)。这将以 NSData 对象的形式返回与该匹配关联的最新匹配数据。然后,我能够使用此 NSData 确保我的比赛表中的所有比赛都得到刷新,以反射(reflect)游戏中心的最新变化。

简而言之,在您的GKTurnBasedMatch 对象上使用loadMatchDataWithCompletionHandler 以确保它们的数据是最新的。

关于iphone - 在没有游戏中心 View Controller 的情况下处理对 GKTurnBasedMatch 的邀请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15507482/

相关文章:

iphone - Libcurl错误: curl/curl. h:没有这样的文件或目录

iphone - Google+ API 还没有?

iphone - 以编程方式在 contenteditable UIWebView 中显示键盘

ios - 保存带有 GIF 图像叠加层的视频

ios - Firebase 数据库更改时在 iOS 中触发通知

iphone - iPhone 中的 Mach 异常

ios - 来自一个 View Controller 的输入附件 View 错误地出现在另一个 View Controller 中

iphone - 游戏中心在完整版和精简版之间

iPhone - 在线多人游戏......了解机制

ios - 我的应用程序图标未显示在 Game Center 上