我正在制作多人 iOS 游戏并遇到以下问题:我发送了一个字典,其中包含一组自定义对象。这些自定义对象符合NSCoding
. 我将字典转换成NSData
这样:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:packet];
然后发送
[asyncSocket writeData:data withTimeout:-1 tag:tag];
收到
[sock readDataWithTimeout:-1 tag:tag];
并尝试取消归档
NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
一切看起来都非常简单,但应用程序在取消归档数据时崩溃,我收到以下错误
[NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x62、0x70、0x6c、0x69、0x73、0x74、0x30、0x30)'
我查看了发送和接收数据的描述,发现数据到达接收设备 1) 更改和 2) 截断。
当我通过 GameKit 协议、Game Center 和蓝牙发送完全相同的数据时,就没有这样的问题——我收到的数据没有改变,所以很明显问题出在 GCDAsyncSocket 深处的某个地方。
有没有人遇到过这样的麻烦?谢谢