Domanda

Voglio inviare un NSArray, quindi devo scriverlo a un NSOutputStream prima. Il metodo dovrebbe essere:

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

posso convertire il puntatore del array per Uint8 _ t utilizzando:

(uint8_t *)arr

Ma come ottenere la lunghezza di byte della matrice? Devo conservare la matrice in un file e leggerlo come NSData?

È stato utile?

Soluzione

  

posso convertire il puntatore del array per Uint8 _ t utilizzando:

(uint8_t *)arr

Questo è solo un cast; in realtà non converte la matrice a una sequenza di byte. Anche se hai inviato l'ammasso privato di matrice attraverso il cavo, i contenuti della matrice sono solo indirizzi di memoria ad altri oggetti. Gli indirizzi di memoria nel processo sono quasi certamente non lo stesso nel processo di ricezione e che sta assumendo che il processo di ricezione è in esecuzione Cacao e sarebbe in attesa di un NSArray!

È necessario serializzare il contenuto della matrice a qualche rappresentanza esterna che il ricevitore sarà in grado di gestire. Potete farlo da la conversione in un plist , creando NSXMLDocument e ottenere i propri dati , o assemblare una rappresentazione personalizzato formato a mano, ma non con la sola un cast.

  

Ma come ottenere la lunghezza di byte dell'array?

La matrice non è una serie di byte; si tratta di un oggetto. Come tale, non ha lunghezza, solo (come un array) il conteggio degli oggetti in esso. Hai bisogno di una serie di byte prima di poter ottenere la lunghezza della serie.

  

Devo salvare la matrice in un file e leggerlo come NSData?

È necessario per ottenere una rappresentazione esterna della matrice, preferibilmente in un oggetto NSData. Dicendogli di scrivere (un plist di) se stesso in un file e la lettura del file di nuovo in è un modo, ma ci sono modi molto migliori che ho elencato sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top