elp*_*elp 6 iphone objective-c nsstring nsdata ipad
我有一个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);
Run Code Online (Sandbox Code Playgroud)
我怎样才能转换回原始的NSData?
data和dataNM的大小不同.编译器给出了这个错误:
2012-04-02 16:33:28.269 DataTest [18008:f803] - [__ NSCFData objectForKey:]:无法识别的选择器发送到实例0x6b46c80
2012-04-02 16:33:28.270 DataTest [18008:f803] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFData objectForKey:]:无法识别的选择器发送到实例0x6b46c80'
谢谢.
使用dataUsingEncoding,NSData的价值不同.
为了传递方法或应用程序等数据,我使用了base64转换.
NSString *d =
[NSString stringWithFormat:@"appdue://obj=%@",
[APBase64Converter base64forData:data]];
Run Code Online (Sandbox Code Playgroud)
NSData *data = [APBase64Converter base64DataFromString:urlParams];
Run Code Online (Sandbox Code Playgroud)
APBase64Converter是一个可以轻松编码/解码数据和字符串的库.
可以从这里下载工作示例和APBase64Converter lib:http://goo.gl/8YNjS
谢谢大家.
我"保留"这篇文章,以帮助人们和我下次!
| 归档时间: |
|
| 查看次数: |
4211 次 |
| 最近记录: |