Pregunta

quiero enviar un NSArray, así que tengo que escribirlo en un NSOutputStream primero. El método debe ser:

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

Puedo convertir un triple de la matriz a uint8 _ t usando:

(uint8_t *)arr

Pero, ¿cómo obtener la longitud de bytes de la matriz? ¿Tengo que salvar a la matriz a un archivo y leerlo como NSData?

¿Fue útil?

Solución

  

Puedo convertir un triple de la matriz a uint8 _ t usando:

(uint8_t *)arr

Eso es sólo un molde; en realidad no convertir la matriz a una secuencia de bytes. Incluso si ha enviado el almacenamiento privado de la matriz sobre el alambre, el contenido de la matriz son sólo las direcciones de memoria a otros objetos. Las direcciones de memoria en el proceso no son casi con toda seguridad el mismo en el proceso de recepción, y eso es suponiendo que el proceso de recepción se está ejecutando Cacao y estaría esperando un NSArray!

Es necesario para serializar el contenido de la matriz a alguna representación externa que el receptor será capaz de manejar. Usted puede hacer que al convertir a un plist , creando un NSXMLDocument y obtener sus datos o el montaje de una representación con formato personalizado con la mano, pero no con un reparto sola.

  

Pero, ¿cómo obtener la longitud de bytes de la matriz?

La matriz no es una serie de bytes; se trata de un objeto. Como tal, no tiene longitud, solamente (como una matriz) el recuento de los objetos en el mismo. Se necesita una serie de bytes antes de poder obtener la longitud de la serie.

  

¿Tengo que salvar a la matriz a un archivo y leerlo como NSData?

Es necesario para obtener una representación externa de la matriz, preferiblemente en un objeto NSData. Diciéndole que escribir (un plist de) sí en un archivo y leer de nuevo el archivo es de una manera, pero hay maneras mucho mejores que he enumerado anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top