我有一个 NSData 对象。
我想将其转换为字符串,传递给函数,然后再转换回 NSData 对象。
但是如何呢?
我试过这个方法,但是NSData的值和原来的不一样!
这里是我的代码:
// 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);
我怎样才能转换回原来的 NSData?
data和dataNM大小不同。 编译器返回此错误:
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'
谢谢。
最佳答案
已解决。
使用dataUsingEncoding
,NSData的值是不同的。
为了围绕方法或应用程序等传递数据,我使用了 base64 转换。
编码
NSString *d =
[NSString stringWithFormat:@"appdue://obj=%@",
[APBase64Converter base64forData:data]];
解码
NSData *data = [APBase64Converter base64DataFromString:urlParams];
APBase64Converter 是一个可以轻松编码/解码数据和字符串的库。
工作示例和 APBase64Converter 库可以从这里下载:http://goo.gl/8YNjS
谢谢大家。
我“保留”这篇文章是为了下次帮助人们和我!
关于iphone - 如何将 NSData 作为 NSString 传递并取回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977269/