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

每当出现该比赛界面屏幕时,我都会使用[GKTurnBasedMatch loadMatchesWithCompletionHandler:]获取所有本地球员的比赛。这样,我假设用户B可以看到他被邀请参加的比赛,但是这个新比赛没有出现。如果我通过GKTurnBasedMatchmakerViewController接受邀请,那么用户会按预期进入游戏,但是令我感到更加困惑的是,如果我打开GKTurnBasedMatchmakerViewController然后在不接受邀请的情况下取消,则新的匹配项会显示在我的自定义匹配项中介面,但缺少使用者A传送的比对资料。

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

最佳答案

这个问题似乎是几个人感兴趣的,因此,这是我最终所做的事情的粗略近似。

首先,根本没有出现新的匹配项的原因仅仅是我每次都希望像我一样刷新 View 时并没有调用[GKTurnBasedMatch loadMatchesWithCompletionHandler:]。因此,我记得那里没有真正的问题。

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

简而言之,请在loadMatchDataWithCompletionHandler对象上使用GKTurnBasedMatch来确保其数据是最新的。

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

10-10 02:23