0

我目前正在实施我的游戏的网络层,我正在取得进展,但是我遇到了一些非常奇怪的事情,我希望有人能对此有所了解:

在发送我的数据之前,我将其编码为 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->cards,但是当我在远程发送对象后尝试执行相同操作时,我可以看到正确的消息类型(kMessageTypeMove),但看不到卡片数据(myMessage->cards)。

如果有人可以请对此有所了解,我将不胜感激

非常感谢

4

1 回答 1

0

tl;博士,使用 NSCoding 序列化你的对象。

您不能将指针发送到不同的进程,因为指针在另一端都是错误的。

让我们在发送机器上说,你有这个:

NSLog(@"cards: %p", message.cards);
//prints "cards: 0xDEADBEEF"

这表示 NSArray* 对象的内存块从内存地址 0xDEADBEEF 开始。在这一点上这一切都是正确的。

现在,您将该0xDEADBEEF指针发送到另一台计算机。计算机获取指针,但另一台计算机上的内存中0xDEADBEEF没有 NSArray。那个记忆区域里可能有任何东西。您已经发送了一个指针,但实际上并没有发送任何数据。

长话短说,只NSCoder用于序列化,因为它非常好。

于 2012-05-03T01:44:24.723 回答