Bir NSData nesnesine sahibim.NSData NSString olarak nasıl geçilir ve geri alınır?
Onu bir dizeye dönüştürmek, bir işleve geçmek ve sonra da NSData nesnesine yeniden dönüştürmek istiyorum.
Ama Nasıl?
Bu yöntemi denedim, ancak NSData değeri, orijinalinden farklı! Burada
kodum:
// 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);
Nasıl geri orijinal NSData dönüştürebilirsiniz?
veri ve dataNM boyutları farklı.
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'
sayesinde: Derleyici bu hatayı geri ver.
NSData oluşturma dizesi dize değeri "data" hiçbir şey için ayarlanmamış, sadece bir boş 'NSMutableData'. NSString'den NSData'nın alınmasında n, nSString nedir? Daha genel olarak ne elde etmeye çalışıyorsunuz? – zaph
'[encoder finishEncoding];' başlangıçta boş olan veri değerini değerlendirir. NSKeyedArchiver' kullanarak iki uygulama arasında bütün bir sınıfı geçmem gerekiyor. Evet, daha önce yaratılan dizedir. – elp
Niçin 'NSString''e dönüşüyor, neden sadece 'NSData' olarak geçmiyorsunuz? – zaph