Gamecenter 比赛数据未更新

Posted

技术标签:

【中文标题】Gamecenter 比赛数据未更新【英文标题】:Gamecenter matchdata does not get updated 【发布时间】:2013-04-12 16:02:43 【问题描述】:

GameKit 有一个奇怪的问题。我想知道其他人是否遇到同样的问题。是bug吗?

我已经使用游戏套件实现了一个基本的回合制游戏。一个玩家邀请另一个玩家

+ (void)findMatchForRequest:(GKMatchRequest *)request withCompletionHandler:(void (^)(GKTurnBasedMatch *match, NSError *error))completionHandler

结束转

- (void)endTurnWithNextParticipants:(NSArray *)nextParticipants turnTimeout:(NSTimeInterval)timeout matchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler

第二个玩家接受并开始游戏。在第二个玩家玩完他的回合后,他结束了回合

- (void)endTurnWithNextParticipants:(NSArray *)nextParticipants turnTimeout:(NSTimeInterval)timeout matchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler

等等……

即使有自定义消息,玩家也会收到通知,一切正常。

当应用程序(其他播放器)在后台并且我通过点击通知横幅启动应用程序时,它也可以工作。

当应用程序在一台设备上在后台运行并且另一台设备结束回合时,会出现此问题。第一个设备会收到关于转弯的通知,但是当我启动应用程序(不是通过点击通知横幅,只是手动)并加载匹配项时,我会得到旧的匹配数据。

+ (void)loadMatchesWithCompletionHandler:(void (^)(NSArray *matches, NSError *error))completionHandler

我不会在我的应用中保留任何游戏数据,只是暂存对象。我已尝试关闭两台设备上的应用程序并再次加载匹配项。他们从游戏中心的服务器获取不同的比赛数据。其中一个获取旧数据,另一个获取已结束回合的更新匹配数据。

我用下面的方法尝试过同样的事情,它有效,但我无法结束转弯。

- (void)saveCurrentTurnWithMatchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler

我在测试时不使用模拟器,只使用设备。 SDK 6.1、ios 6.0.1,当然还有沙盒。

【问题讨论】:

【参考方案1】:

loadMatchesWithCompletionHandler: 调用仅获取比赛的元数据,例如谁在比赛、比赛的状态等。基本上是您将在概览视图控制器中显示的信息。

要获取最新版本的比赛数据 blob,请在显示游戏之前在 GKTurnBasedMatch 对象上调用 loadMatchDataWithCompletionHandler:。在某些时候,这也必须在发送回合或结束比赛后完成!

【讨论】:

以上是关于Gamecenter 比赛数据未更新的主要内容,如果未能解决你的问题,请参考以下文章

(未AC)7-10 冰壶比赛 (30分)

Android 回合制多人游戏 - 如何在屏幕关闭时获取比赛更新?

比赛题解 更新ING

P1309 瑞士轮 未完成 60

排球比赛计分规则

Game Center 沙盒中缺少邀请