我创建了一个会话,将其分享给另一个玩家,现在我想开始游戏。我可以在两台设备上看到两个玩家的会话。所以,看起来我们已经准备好进行游戏了,但我需要在游戏前更改连接状态,我可以在两台设备上执行此操作。
但是......当我在设备 A 上执行此操作时,我看到用户 A 已连接,而用户 B 未连接。之后,当我在设备 B 上重复该过程时,我看到反之亦然的情况。B 已连接,A 未连接。
这是我连接播放器并发送数据的代码:
session.setConnectionState(.connected) { (error) in
if let err = error {
assertionFailure(err.localizedDescription)
}
else {
print("NC:",session.players(with: .notConnected))
print(" C:",session.players(with: .connected))
let m = MoveTransfer(move:1) // test struct to send/receive data
session.send(m.data(), with: .reliable) { (error) in
if let err = error {
assertionFailure(err.localizedDescription)
}
}
}
}
我收到错误:
The requested operation could not be completed because there are no recipients connected to the session
顺便说一句,我无法更改模拟器上的连接状态(iCloud 已登录)。
我忘了说,我正在开发一款回合制游戏。
编辑
再次尝试,现在经过几次迭代,我得到了这个:
我让两个玩家都连接到会话。但是发送数据仍然不起作用。
这是控制台输出:
NC: [] // not connected array and connected array below
C: [<GKCloudPlayer: 0x17402e700>, id: playerID1, name: Player1,<GKCloudPlayer: 0x17402e900>, id: playerID2, name: Player2]
fatal error: The requested operation could not be completed because there are no recipients connected to the session.
在两个真实设备上得到了这个。