在iOS 10上,我尝试使用GKTurnBasedMatchmakerViewController创建匹配。我可以调出视图,以便用户可以选择匹配或邀请。我无法弄清楚如何可靠地确定响应于此而创建的匹配。问题是,在iOS 10中,不推荐使用GKTurnBasedMatchmakerViewControllerDelegate的didFindMatch方法。过去通过匹配调用该方法。过去很容易!
弃用消息显示“使用GKTurnBasedEventListener播放器:receivedTurnEventForMatch:didBecomeActive”。文档和堆栈溢出线程充满了调用该方法的原因。请参阅此主题以获取一个好的列表:Gamecenter ios 9 GameCenter GKLocalPlayerListener methods not called。如果你想象一个用户已经有几个游戏,你可以看到这个方法会因为很多不同的原因而被调用,据我所知,它可能随时发生。我的问题是:如何确定这些调用中的哪一个是“我刚刚为你创建了一个匹配,就在这里!”调用
我认为一些例子不起作用:
我被困住了,感谢任何帮助。
答案 0 :(得分:0)
在事件处理程序触发时仔细检查您的状态。我相信你应该保持invited
状态,直到你接受比赛为止。
编辑:实际上,我相信在事件处理程序触发时会有两个条件指示新匹配:
您处于受邀状态(已加入)
其他人都处于邀请或自动匹配状态(您开始了比赛)
编辑2:
检查我的旧代码,结果发现我查看了matchData
对象。因为我知道在玩家1结束转弯之前玩家2没有收到邀请(等等),并且因为我知道玩家1必须保存匹配数据才能结束转弯,如果matchData.length
大于零,我以为我正在加入正在进行的游戏。我没有依赖参与者的身份。但这并不能解决你的问题。
我做的另一件事是创建我自己的头结构,我在NSData的开头插入。在该标题中,player1将为每个其他玩家设置状态标志,当这些玩家加入时,这将是显而易见的。我完全忽略了匹配对象中的参与者状态。
关于您的第三个项目符号,您可以使用cloudKit远程保存列表,而不是在本地保存列表。除非您明确删除,否则cloudkit数据将在安装/卸载期间保持不变。
cloudkit的要点是:
NSMutableArray
直接保存到上述字节字段NSMutableArray