¿Alguien puede decirme cómo convertir un NSArray
en un NSData
? Tengo un NSArray
. Necesito enviarlo a un NSInputStream
. Para hacer eso, necesito convertir el archivo NSArray
a NSData
.
Por favor ayúdame, estoy atrapado aquí.
Use NSKeyedArchiver (que es la última oración de los enlaces de Garrett de la publicación):
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
Tenga en cuenta que todos los objetos array
deben ajustarse al NSCoding
protocolo. Si se trata de objetos personalizados, significa que necesita leer más sobre codificación y decodificación de objetos .
Tenga en cuenta que esto creará un formato de lista de propiedades bastante difícil de leer, pero puede manejar una amplia gama de objetos. Si tiene una matriz muy simple (cadenas, por ejemplo), es posible que desee utilizar NSPropertyListSerialization, que crea una lista de propiedades un poco más simple:
NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
También hay una constante de formato XML que puede pasar si prefiere que sea legible en el cable.
En una nota algo relacionada, así es como convertiría NSData de nuevo en un NSArray:
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
No estoy seguro de si esto le ayudará, pero es un enlace para un NSMutableArray a NSData .
fuente
Usé este código.
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];
fuente
Puedes hacerlo-
NSArray *array= [NSArray array]; NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
fuente
En iOS 9+, use esto, por favor:
NSArray *array = [[NSArray alloc] init]; NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
La versión anterior de esto quedó obsoleta en iOS 8.
fuente
Rápido:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray) print(data)
fuente