Mam obiekt NSData.Jak przekazać NSData jako NSString i odzyskać?
Chcę przekonwertować go na ciąg, przekazać do funkcji, a następnie wrócić do obiektu NSData.
Ale jak?
Próbowałem tej metody, ale wartość NSData różni się od oryginału!
tutaj mój kod:
// 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);
Jak mogę przekonwertować z powrotem do pierwotnego NSData?
Dane i daneNM mają różny rozmiar. Compiler oddać ten błąd:
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'
dzięki.
Podczas tworzenia NSData wartość ciągu 'data' nie jest ustawiona na nic, jest to po prostu pusta' NSMutableData'. W Pobieranie NSData z NSString, co to jest "d", NSString? Bardziej ogólnie, co próbujesz osiągnąć? – zaph
'[enkoder finishEncoding];' waloryzuje wartość danych, która jest początkowo pusta. Muszę przekazać całą klasę między dwiema aplikacjami za pomocą 'NSKeyedArchiver'. Tak, 'd' jest ciągiem utworzonym wcześniej. – elp
Dlaczego warto przekonwertować na 'NSString', dlaczego po prostu nie przekazać jako' NSData'? – zaph