我正在使用GKTurnBasedMatch的removeWithCompletionHandler以编程方式在需要时从Game Center删除旧的(已完成,即使用status = GKTurnBasedMatchStatusEnded)回合制匹配(为了避免额外的加载负担,我希望将完成的匹配数量保持在最低限度)。 我没有收到任何错误,并且正确删除了匹配项。 但是,大部分时间我这样做,我的用户被踢出游戏中心,因此本地播放器不再经过身份验证。这种情况发生在iOS7上,包括iPhone和iPad。
有没有人经历过这个?有什么方法吗?
注意:我可能不会从GC中删除匹配项,因为我使用内部业务逻辑来确定应该向用户列出哪些匹配项,并且仅显示10个(未完成的)最新匹配项。但是,我担心GC中可能会保留数百个游戏,当我必须列出正在进行的匹配时,这可能会减慢与GC的交互。
答案 0 :(得分:2)
如果你在另一个Game Center API调用的完成处理程序中调用removeWithCompletionHandler,那么你可能会遇到一直困扰我一段时间的同样问题。我今天尝试的解决方案只是将调用removeWithCompletionHandler延迟几秒钟,如下所示:
[match performSelector:@selector(removeWithCompletionHandler:) withObject:^(NSError *error) { /* callback code here */ } afterDelay:3.0];
对我而言,这很有效,但意味着我必须修改与展示活动游戏有关的一些事情......所以如果这个解决方案适合你,请小心。此外,值得注意的是,3秒延迟是我选择的任意值,它对我有用。
就我而言,我在完成处理程序块中调用了removeWithCompletionHandler,用于GKTurnBasedMatch上的各种quit方法。
我想在游戏中心结束时会出现一些问题,这两个请求无法如此靠近而不会造成这样的祸患。事实证明,当我慢慢地通过游戏中心的电话时,这个问题从未发生过。
修改强>
这里有一些很酷的消息;好像他们已经修复了iOS 8中的错误。我构建了一个应用程序,用于演示错误报告的错误(最初用于iOS 7)。我已经测试了在iOS 8中运行的相同应用程序,似乎该错误已被压缩。
最后。
IMO,您应该考虑立即添加removeWithCompletionHandler调用。