tengo un objeto NSData.¿Cómo pasar NSData como NSString y recuperarlo?
Quiero convertirlo en una cadena, pasar a una función y luego volver a reconvertirlo al objeto NSData.
Pero ¿cómo?
Intenté este método, pero el valor de NSData es diferente al original.
aquí mi código:
// a generic class
APClass *c = [[APClass alloc] init];
c.aNumber = 123;
c.aString = @"my string";
// my data obj
NSMutableData *data = [NSMutableData data];
// archiver to store class in nsdata
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[encoder encodeObject:[NSNumber numberWithInt:c.aNumber] forKey:@"aNum"];
[encoder encodeObject:c.aString forKey:@"aStr"];
[encoder finishEncoding];
[encoder release];
[c release];
NSLog(@"%@", data);
NSString *d = [NSString stringWithFormat:@"%@", data];
// ---
NSString *strFromData = [NSString stringWithFormat:@"%@", d];
NSData *dataNM = [strFromData dataUsingEncoding:NSUTF8StringEncoding];
// decoder to retrieve class from nsdata
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNM];
int number = [[decoder decodeObjectForKey:@"aNum"] intValue];
NSString *string = [decoder decodeObjectForKey:@"aStr"];
[decoder finishDecoding];
[decoder release];
NSLog(@"[Number: %d] -- [String: %@]", number, string);
¿Cómo puedo convertir de nuevo a NSData original?
datos y dataNM son de un tamaño diferente. Compilador devolver este error:
2012-04-02 16:33:28.269 DataTest[18008:f803] -[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80
2012-04-02 16:33:28.270 DataTest[18008:f803] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData objectForKey:]: unrecognized selector sent to instance 0x6b46c80'
gracias.
Al crear el valor de cadena de NSData 'data' no está configurado a nada, es solo un' NSMutableData' vacío. En Getting NSData from NSString, ¿qué es 'd', un NSString? En general, ¿qué estás tratando de lograr? – zaph
'[encoder finishEncoding];' valor valor de datos que está inicialmente vacío. Necesito pasar una clase completa entre dos aplicaciones usando 'NSKeyedArchiver'. Sí, 'd' es la cadena creada antes. – elp
¿Por qué convertir a 'NSString', por qué no simplemente pasar como' NSData'? – zaph