Pergunta

Eu quero enviar um NSArray, então eu tenho que fazer isso em um NSOutputStream primeiro. O método deve ser:

- (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)length

posso converter ponteiro da matriz para uint8 _ t usando:

(uint8_t *)arr

Mas como obter o comprimento de bytes da matriz? Eu tenho que salvar a matriz para um arquivo e lê-lo como NSData?

Foi útil?

Solução

posso converter ponteiro da matriz para uint8 _ t usando:

(uint8_t *)arr

Isso é apenas um elenco; na verdade não converter a matriz a uma sequência de bytes. Mesmo que você enviou à armazenagem privada da matriz sobre o fio, o conteúdo da matriz são apenas endereços de memória para outros objetos. Os endereços de memória em seu processo são quase certamente não é o mesmo no processo e recebimento que está assumindo que o processo de recebimento está sendo executado Cacau e estaria esperando um NSArray!

Você precisa serializar o conteúdo da matriz para alguns representação externa que o receptor será capaz de manusear. Você pode fazer isso por conversão para um plist , criando um NSXMLDocument e obter seus dados , ou montar uma representação de formato personalizado com a mão, mas não com um elenco sozinho.

Mas como obter o comprimento de bytes da matriz?

A matriz não é uma série de bytes; é um objeto. Como tal, que não têm comprimento, única (como uma matriz) a contagem de objectos na mesma. Você precisa de uma série de bytes antes de poder obter o comprimento da série.

Eu tenho que salvar a matriz para um arquivo e lê-lo como NSData?

Você precisa ter uma representação externa da matriz, de preferência em um objeto NSData. Dizendo-lhe para gravação (a plist de)-se a um arquivo e ler a parte de trás arquivo em é um caminho, mas há maneiras muito melhores, que eu listados acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top