Я пытаюсь отправить массив от одного игрока к другому.
Я создаю структуру в заголовке
typedef struct {
Message message;
unsigned int numBytes;
void * bytes;
} MessagePingBackToCaller;
typedef struct {
MessageType messageType;
} Message;
И попробуйте отправить с этим:
-(void)sendOpponentRadar{
MessagePingBackToCaller sendMessage;
sendMessage.message.messageType = kMessageTypeRecievedRadarPing;
NSData *pingData = [NSKeyedArchiver archivedDataWithRootObject:[cover gatherAndReturnColumnNumbers]];
sendMessage.bytes = pingData;
NSData *data = [NSData dataWithBytes:&sendMessage length:sizeof(MessagePingBackToCaller)];
[self sendData:data];
}
И получить с этим:
if (message->messageType == kMessageTypeRecievedRadarPing){
MessagePingBackToCaller *messageSent = (MessagePingBackToCaller *)[data bytes];
NSLog(@"Data : %@", messageSent->bytes);
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:messageSent->bytes];
NSLog(@"Results : %@", array);
}
Однако не повезло, поэтому я огляделся и обнаружил, что @rwenderlich написал немного полезного:
Преобразование NSArray в NSData
В структуре сохраните unsigned int numBytes и void * bytes
В numBytes запишите длину NSData, а затем запишите содержимое NSData
С другой стороны, прочитайте numBytes, чтобы увидеть, сколько байтов нужно прочитать дальше, затем прочитайте это количество байтов и выполните обратный процесс (bytes-> NSData-> NSArray).
Я неплохо разбираюсь в 1 и 2... Верю, но теряюсь в 3 и 4. Не мог бы кто-нибудь помочь мне перевести это в осмысленный код?
Спасибо!