问题 Game Center属性中的Game Center GKTurnBasedMatch问题


我正在创建一个游戏中心游戏 GKTurnBasedMatch 火柴。我遇到了问题 readonly  matchData 在...上的财产 GKTurnBasedMatch 似乎没有正确存储在Game Center服务器上。

我在用着 这个StackOverflow的答案 在...上生成md5校验和 matchData  NSData,无论是在Game Center服务器上发送还是从Game Center服务器接收。

我注意到我的校验和 NSData 我发送时的游戏数据对象 matchData 使用 GKTurnBasedMatch 实例方法 endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:

然后对手使用获取比赛 GKTurnBasedMatch的班级方法 loadMatchesWithCompletionHandler:,当比赛到来时(没有错误),我再次记下校验和。

两个校验和不匹配,并且基于重建的游戏,得到的数据明显不相同。我已经检查了两个帐户 matchID 我的财产 GKTurnBasedMatch 对象是相同的。

我还进行了以下测试:

NSLog(@"matchID: %@ matchData checksum: %@",
                    match.matchID, 
                    [Utilities md5StringFromData:match.matchData]);

// match is a valid `GKTurnBasedMatch` object.
[match endTurnWithNextParticipants: @[ opponent ] // My `GKTurnBasedParticipant` opponent
                       turnTimeout:600
                         matchData:data // This is a valid NSData object
                 completionHandler:^(NSError *error) {
                      if (nil != error) {

                          NSLog(@"%@", error);

                      } else {

NSLog(@"Successfully ended turn.");

[GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {

    if (nil != error) {

        NSLog(@"Error getting matches: %@", [error localizedDescription]);

    } else {

        for (GKTurnBasedMatch *match in matches) {

            NSLog(@"matchID: %@ matchData checksum: %@", 
                        match.matchID, 
                        [Utilities md5StringFromData:match.matchData]);

        }

    }
}];

                      }
}];

在此示例中,我使用数据结束转弯并立即从Game Center检索匹配,数据匹配。但是,当我访问 matchData 从对手的游戏中心账户和设备,他们不同。

有人遇到过这样的事吗?


12868
2018-02-06 17:26


起源



答案:


我发现了解决方案 Apple的Dev论坛

事实证明 loadMatchesWithCompletionHandler: 并不总是抓住最新的 matchData。为确保您拥有最新版本,请务必致电 loadMatchDataWithCompletionHandler: 你的方法 GKTurnBasedMatch 目的。


11
2018-02-06 19:27



我真的爱你! - Paul Hunter
你知道这个实现背后的原因是什么吗? - Paul Hunter
我假设理由是他们想最小化网络请求并进行最佳缓存,但是男人,这让我疯狂,直到找到解决方案。 - Tim Camber
对我来说似乎破坏了缓存。甚至文档也没有提供任何关于游戏对象可能不是最新的事实的通知。我也很疯狂。 - Paul Hunter
文档没有明确提到这些可能的陈旧对象,但是如果你在Game Center Programming Guide中搜索这些方法,那么它们所写的内容对应于它的工作方式似乎有点似乎有点可信。但是,是的,我和你在一起,应该更清楚。 - Tim Camber


答案:


我发现了解决方案 Apple的Dev论坛

事实证明 loadMatchesWithCompletionHandler: 并不总是抓住最新的 matchData。为确保您拥有最新版本,请务必致电 loadMatchDataWithCompletionHandler: 你的方法 GKTurnBasedMatch 目的。


11
2018-02-06 19:27



我真的爱你! - Paul Hunter
你知道这个实现背后的原因是什么吗? - Paul Hunter
我假设理由是他们想最小化网络请求并进行最佳缓存,但是男人,这让我疯狂,直到找到解决方案。 - Tim Camber
对我来说似乎破坏了缓存。甚至文档也没有提供任何关于游戏对象可能不是最新的事实的通知。我也很疯狂。 - Paul Hunter
文档没有明确提到这些可能的陈旧对象,但是如果你在Game Center Programming Guide中搜索这些方法,那么它们所写的内容对应于它的工作方式似乎有点似乎有点可信。但是,是的,我和你在一起,应该更清楚。 - Tim Camber