iphone objective-c ios nsdictionary

iphone - ¿Cómo puedo convertir NSDictionary a NSData y viceversa?



objective-c ios (6)

Estoy enviando NSString y UIImage usando bluetooth. Decidí almacenar ambos en un NSDictionary y luego convertir el diccionario a NSData .

Mi pregunta es cómo convertir NSDictionary a NSData y viceversa.


En Swift 2 puedes hacerlo de esta manera:

var dictionary: NSDictionary = ... /* NSDictionary to NSData */ let data = NSKeyedArchiver.archivedDataWithRootObject(dictionary) /* NSData to NSDictionary */ let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! NSDictionary

En Swift 3 :

/* NSDictionary to NSData */ let data = NSKeyedArchiver.archivedData(withRootObject: dictionary) /* NSData to NSDictionary */ let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data)


NSDictionary -> NSData:

NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:yourDictionary forKey:@"Some Key Value"]; [archiver finishEncoding]; [archiver release]; // Here, data holds the serialized version of your dictionary // do what you need to do with it before you: [data release];

NSData -> NSDictionary

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; NSDictionary *myDictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain]; [unarchiver finishDecoding]; [unarchiver release]; [data release];

Puede hacerlo con cualquier clase que se ajuste a NSCoding.

source


Por favor, pruebe este

NSError *error; NSDictionary *responseJson = [NSJSONSerialization JSONObjectWithData:webData options:NSJSONReadingMutableContainers error:&error];


Use NSJSONSerialization:

NSDictionary *dict; NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:dataFromDict options:NSJSONReadingAllowFragments error:&error];

La última id devoluciones, por lo que es una buena idea verificar el tipo de objeto devuelto después de realizar el envío (aquí lo he enviado a NSDictionary).


NSDictionary -> NSData:

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myDictionary];

NSData -> NSDictionary:

NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:myData];


NSDictionary de NSData

http://www.cocoanetics.com/2009/09/nsdictionary-from-nsdata/

NSDiccionario a NSData

Puede usar la clase NSPropertyListSerialization para eso. Eche un vistazo a su método:

+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString

Devuelve un objeto NSData que contiene una lista de propiedades dada en un formato específico.