2009-08-17 21 views
75

Qualcuno può dirmi come convertire un NSArray in un NSData? Ho un NSArray. Devo inviarlo a un NSInputStream. Per farlo ho bisogno di convertire NSArray in un NSData. Per favore aiutami, sono bloccato qui.Come convertire NSArray in NSData?

risposta

183

Usa NSKeyedArchiver (che è l'ultima frase del post link Garrett):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

Si ricorda che tutti gli oggetti in array devono essere conformi al protocollo NSCoding. Se si tratta di oggetti personalizzati, significa che è necessario leggere su Encoding and Decoding Objects.

Si noti che questo creerà un formato elenco di proprietà abbastanza difficile da leggere, ma può gestire una gamma molto ampia di oggetti. Se si dispone di un semplice array (stringhe per esempio), si consiglia di utilizzare NSPropertyListSerialization, che crea un po 'elenco delle proprietà più semplice:

NSString *error; 
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error]; 

C'è anche un formato XML costante si può passare se si preferisce si essere leggibile sul filo.

+0

+1 per la migliore risposta e grazie mille. – Shivaay

3

Non sono sicuro che questo possa essere d'aiuto, ma è un collegamento per uno NSMutableArray to NSData.

+0

Grazie per la rapida risposta , ho controllato che prima non aiutava molto. – satish

91

In una nota correlata in qualche modo, ecco come si potrebbe convertire il NSData di nuovo ad un NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data] 
+5

Assicurarsi che sia NSKeyedUnarchiver e non NSKeyedArchiver. Può essere un errore facile da fare quando si utilizza il completamento automatico. – Sean

+2

Questa risposta, abbinata alla risposta scelta dall'alto, dovrebbe essere sufficiente per archiviare/annullare l'archiviazione di qualsiasi oggetto compatibile da/verso NSData –

1

Si può fare questo-

NSArray *array= [NSArray array]; 
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array]; 
0

Ho usato questo codice.

NSError *error; 
NSMutableData *jsonData = [[NSJSONSerialization dataWithJSONObject:yourDemoArray 
                    options:0 // Pass 0 if you don't care about the readability of the generated string 
                    error:&error] copy]; 
0

In iOS 9+ utilizzare questo per favore:

NSArray *array = [[NSArray alloc] init]; 
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil]; 

La versione precedente di questo è stata sconsigliata a iOS 8.

0

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray) 
print(data)