マルチプレイヤー 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、および bluetooth を介してまったく同じデータを送信すると、このような問題はありません。データを変更せずに受信するため、明らかに問題は GCDAsyncSocket の奥深くにあります。
誰もそのようなトラブルに遭遇したことがありますか?ありがとう