Question

Je veux envoyer un NSArray, donc je dois écrire un NSOutputStream premier. La méthode doit être:

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

Je peux convertir le pointeur du tableau à l'aide Uint8 _ t:

(uint8_t *)arr

Mais comment obtenir la longueur des octets du tableau? Dois-je enregistrer le tableau dans un fichier et le lire comme NSData?

Était-ce utile?

La solution

  

Je peux convertir le pointeur du tableau à l'aide Uint8 _ t:

(uint8_t *)arr

C'est juste un casting; il ne convertit pas en fait le tableau à une séquence d'octets. Même si vous avez envoyé le stockage privé du réseau sur le fil, le contenu du tableau sont des adresses seulement de mémoire à d'autres objets. Les adresses de mémoire dans votre processus sont presque certainement pas la même chose dans le processus de réception et qui est en supposant que le processus de réception est en cours d'exécution et Cocoa serait attendu NSArray!

Vous devez sérialiser le contenu du tableau à une certaine représentation externe que le récepteur sera capable de gérer. Vous pouvez le faire par conversion à un plist, la création NSXMLDocument et obtenir ses données , ou l'assemblage d'une représentation au format personnalisé à la main, mais pas avec un casting seul.

  

Mais comment obtenir la longueur des octets du tableau?

Le tableau est pas une série d'octets; il est un objet. En tant que tel, il ne dispose pas de longueur, seulement (comme un tableau) le nombre d'objets qu'il contient. Vous avez besoin d'une série d'octets avant de pouvoir obtenir la longueur de la série.

  

Dois-je enregistrer le tableau dans un fichier et le lire comme NSData?

Vous devez obtenir une représentation externe de la matrice, de préférence dans un objet NSData. Dire à écrire (un plist de) lui-même dans un fichier et la lecture du fichier en arrière est une façon, mais il existe des moyens beaucoup mieux, que j'énumérés ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top