Envie e receba NSData via GameKit

Estou tentando enviarNSData sobreBluetooth atravésGameKit.

Enquanto eu tenhoGameKit configurado e capaz de enviar pequenas mensagens, agora eu gostaria de expandir e enviar arquivos inteiros.

Eu tenho lido que você precisa dividir arquivos grandes em pacotes antes de enviá-los individualmente.

Então eu decidi criar umstruct para facilitar a decodificação dos pacotes quando eles são recebidos na outra extremidade:

typedef struct {
    const char *fileName;
    NSData *contents;
    int fileType;
 int packetnumber;
 int totalpackets;
} file_packet; 

No entanto, para arquivos pequenos (8 KB e menos), pensei que um pacote seria suficiente.

Portanto, para um pacote, pensei que seria capaz de criar um arquivo_pacote, definir suas propriedades e enviá-lo via -sendDataToAllPeers: withDataMode: error:

NSData *fileData;
file_packet *packet = (file_packet *)malloc(sizeof(file_packet));
packet->fileName = [filename cStringUsingEncoding:NSASCIIStringEncoding];
packet->contents = [NSData dataWithContentsOfFile:selectedFilePath];
packet->packetnumber = 1;
packet->totalpackets = 1;
packet->fileType = 56; //txt document
fileData = [NSData dataWithBytes:(const void *)packet length:sizeof(file_packet)];
free(packet);

NSError *error = nil;
[self.connectionSession sendDataToAllPeers:fileData withDataMode:GKSendDataReliable error:&error];
if (error) {
 NSLog(@"An error occurred: %@", [error localizedDescription]);
}

No entanto, não acho que algo esteja definindo fileData - eerror não exibe nada.

Quando um arquivo é recebido, faço o seguinte:

file_packet *recievedPacket = (file_packet *)malloc(sizeof(file_packet));
recievedPacket = (file_packet *)[data bytes];
NSLog(@"packetNumber = %d", recievedPacket->packetnumber);
...

No entanto, a saída no console épacketNumber = 0, mesmo quando defino packetNumber como 1.

Estou perdendo o óbvio? Eu não sei muito sobreNSData ouGameKit.

Então, minha pergunta é: posso adicionar umfile_packet noNSDatae, em caso afirmativo, como faço com êxito - e como você divide arquivos em vários pacotes?

questionAnswers(2)

yourAnswerToTheQuestion