我正在使用GameKit進行多人Swift(XCode 7.3/iOS 9.2)遊戲。通過GKMatchDelegate檢查整個結構didReceiveData
我使用自定義結構作爲通過GameKit發送的信息。下面是結構的副本。 frustrationNetworkMessage是一個字符串枚舉&卡是一個單獨的類(如果需要的話可以張貼代碼)
struct frustrationNetworkMessage {
var messageType : FrustrationNetworkMessageType
var cards : [Card]
var actingPlayer : String
init(messageType : FrustrationNetworkMessageType, cards : [Card], actingPlayer : String) {
self.messageType = messageType
self.cards = cards
self.actingPlayer = actingPlayer
}
我的問題是在'比賽(比賽:GKMatch,didReceiveData數據:NSData的,fromRemotePlayer球員:GKPlayer)'方法。我已經工作了,這是被稱爲曾有數據被接收:
private var receivedData : NSMutableData
func decode<T>(data: NSData) -> T {
let pointer = UnsafeMutablePointer<T>.alloc(sizeof(T.Type))
data.getBytes(pointer, length: sizeof(T))
return pointer.move()
}
func match(match: GKMatch, didReceiveData data: NSData, fromRemotePlayer player: GKPlayer) {
print("Match/did receive data: size of data - \(sizeofValue(data))")
receivedData.appendData(data)
if let receivedNetworkMessage : frustrationNetworkMessage = decode(receivedData) {
print("Match/did receive data: \(receivedNetworkMessage.messageDetails())")
當我運行它崩潰在與EXC_BAD_ACCESS(我的理解是它抱怨它試圖訪問的一部分,最終打印語句上面的代碼尚未收到的結構)。
作爲一個例子:
消息摘要在發送 - >sendNetworkMessage:消息類型:startNewGame與actingPlayer:G:118279601 &卡計數:1 - 消息大小:40
消息長度第一次匹配didReceiveData被調用 - >匹配/確實接收數據:數據大小 - 8
我該如何檢查在執行操作之前我已經獲得了整個結構?我曾經想過更新結構以包含一個長度字段(理論上我應該一直收到 - 因此可以用它來檢查數據包的長度)。