我有一个游戏中心实时多人游戏应用程序,并且在检查玩家何时断开连接时有一个漏洞。我有这段代码:
func match(match: GKMatch!, player player: GKPlayer!, didChangeConnectionState state: GKPlayerConnectionState){
println("called")
if(state==GKPlayerConnectionState.StateConnected){
println("connected")
}
if(state==GKPlayerConnectionState.StateDisconnected){
println("Disconnected")
}
if(state==GKPlayerConnectionState.StateUnknown){
println("unknown")
}
println(player.displayName)
if(state == GKPlayerConnectionState.StateDisconnected){
if(player.playerID == GKLocalPlayer.localPlayer().playerID){
Label.text = "You Disconnected"
}
else{
Label.text = "Your opponent disconnected"
}
}
}
如果一名玩家进入控制中心并开启飞行模式,则会返回对手断开连接的情况。有什么方法可以解决这个问题吗?
任何反馈都将非常感激
答案 0 :(得分:0)
没关系,我认为,因为启动控制中心没有调用app委托applicationDidEnterBackground函数,应用程序在控制中心仍在运行,但事实证明控制中心将其置于非活动状态,所以我能够处理它
答案 1 :(得分:0)
我使用iOS Reachability代码解决了这个问题。
didChangeConnectionState
仅用于远程连接。如果你断开连接(无论是进入飞行模式,还是合法地失去WIFI连接),那么与游戏的连接就会中断,并且didChangeConnectionState
被称为传递给对手的玩家。
使用可访问性代码,您可以查询此回调触发时是否处于脱机状态。然后你可以告诉你回调是因为你离线了,而不是对手失去联系。
一个小问题是,有时候可达性调用需要花一点时间来评估,允许didChangeConnectionState
调用先返回。为实现此目的,请在didChangeConnectionState
来电之后几秒钟,然后检查您的可达性结果。
史蒂夫。