我目前正在实施我的游戏的网络层,我正在取得进展但是我遇到了一些非常奇怪的东西,我希望有人可以放弃一些可能:
在发送数据之前我将其编码为NSData类型(message.cards = [MovePlayer beginEncodeMyCards:myCards];)然后将其分配给指针(message.cards)
MessageMove message;
message.message.messageType = kMessageTypeMove;
/**/message.cards = [MovePlayer beginEncodeMyCards:myCards];/**/
NSData *data = [NSData dataWithBytes:&message length:sizeof(message)];
如果我在客户端进行所有解码,如下所示:
MessageMove *myMessage = (MessageMove *) [data bytes];
/**/myCards = [MovePlayer beginDecodeMyCards:myMessage->cards cardArray:myCards];/**/
一切正常,我能够解码myMessage->卡,但是当我在远程发送对象后尝试做同样的事情时,我可以看到正确的消息类型(kMessageTypeMove)但不能看到卡数据(myMessage->牌)。
如果有人能够对此有所启发,我会非常感激
非常感谢答案 0 :(得分:0)
tl; dr,使用NSCoding序列化您的对象。
你不能发送指向不同进程的指针,因为指针在另一方面都是错误的。
让我们说在发送机器上,你有这个:
NSLog(@"cards: %p", message.cards);
//prints "cards: 0xDEADBEEF"
这表示NSArray *对象的内存块从内存地址0xDEADBEEF开始。这一点都是正确的。
现在,您将0xDEADBEEF
指针发送到另一台计算机。计算机获取指针,但0xDEADBEEF
处的内存在另一台计算机上没有NSArray 。在该内存区域中可能存在任何。你发送了一个指针,但实际上并没有发送任何数据。
长话短说,只需使用NSCoder
进行序列化,因为它非常好。