我有一个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'
谢谢。
data
并没有被设置成任何值,它只是一个空的NSMutableData
。在从NSString获取NSData时,变量d
是一个NSString吗?更一般地说,您想要实现什么目标? - zaph[encoder finishEncoding];
这行代码将编码器的编码过程完成。数据值最初为空,需要对其进行赋值。我需要使用NSKeyedArchiver
在两个应用程序之间传递整个类。是的,d
是之前创建的字符串。 - elpNSString
,而不是直接传递为NSData
? - zaph