üzerinden tüm bir yapının kontrol edilmesi GameKit kullanarak bir Multiplayer Swift (XCode 7.3/iOS 9.2) oyun üzerinde çalışıyorum.GKMatchDelegate didReceiveData
GameKit aracılığıyla gönderilen bilgiler olarak özel bir yapı kullanıyorum. Yapının kopyası aşağıdadır. '(: GKMatch, didReceiveData verilerine: NSData, fromRemotePlayer oyuncu: GKPlayer maç) maçı' frustrationNetworkMessage bir dize enum & Kart
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
}
Sorunum içindedir (gerekirse kod gönderebilirsiniz) ayrı sınıftır olduğunu yöntem. Bu bazı veriler alındıktan sonra çağrılan dışarı çalıştık:
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())")
Ben buna bir kısmını erişmeye çalışıyor şikayet anlamak EXC_BAD_ACCESS (nihai baskı deyimi de çöküyor Yukarıdaki kodu çalıştırdığınızda alınmamış olan yapı). Mesaj türü: actingPlayer ile startNewGame: G: 118279601 & kart sayısı: 1 - mesaj boyutu: 40
mesaj uzunluğu ilk kez>sendNetworkMessage - gönderilen en
Mesaj özeti: Bir örnek olarak
match didReceiveData çağrıldı ->Eşleşme/veri alma: veri boyutu - 8
Tüm yapının üzerine etki etmeden önce kontrol ettiğimi nasıl kontrol edebilirim? Yapıyı bir uzunluk alanı içerecek şekilde güncellemeyi düşünmüştüm (teoride her zaman bunu bir seferde almalıyım - böylece paket uzunluğunu kontrol etmek için kullanabilirdim).