Ich habe ein NSData-Objekt.Wie übergebe ich NSData als NSString und bekomme es zurück?
Ich möchte es in eine Zeichenfolge konvertieren, an eine Funktion übergeben und dann zurück in NSData-Objekt konvertieren.
Aber wie?
Ich habe diese Methode versucht, aber NSData Wert ist es anders als das Original!
hier mein Code:
// 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);
Wie kann ich auf original NSData zurück konvertieren?
Daten und DatenNM unterscheiden sich in der Größe. Compiler zurück geben diesen Fehler:
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'
Dank.
In Creating NSData Zeichenfolge Wert 'Daten' ist nicht auf etwas festgelegt, es ist nur eine leere' NSMutableData'. Wenn NSData von NSString abgerufen wird, was ist "d", ein NSString? Allgemeiner: Was versuchst du zu erreichen? – zaph
'[Encoder finishEncoding]; Valorize Datenwert, der anfänglich leer ist. Ich muss eine ganze Klasse zwischen zwei Anwendungen mit 'NSKeyedArchiver' übergeben. Ja, "d" ist die zuvor erstellte Zeichenfolge. – elp
Warum zu einem 'NSString' konvertieren, warum nicht einfach als' NSData' übergeben? – zaph