我正在开发一个简单的回合制文字游戏,但我很难弄清楚邀请的运作方式。当用户 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/