iphone - 如何将 NSData 作为 NSString 传递并取回?

标签 iphone objective-c ipad nsstring nsdata

我有一个 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/

相关文章:

ios - 以编程方式创建可从多个 View 使用的 UISearchBar

ios - 防止玩家从地面掉落 - Sprite Kit

ios - Sprite 套件 : How to add scene on top of running scene

iphone - iPad:如何将iPhone应用程序转换为iPad兼容?

iphone - 延迟返回值而不是整个方法

iphone - 将新值设置为具有先前值的 NSString 变量

iphone - UIButton setFont 在 iPhone 2G iOS 3.1.3 上失败

ios - Swift Realm 使用数组过滤 List 属性

iphone - CGAffineTransformMakeRotation 围绕外部点

objective-c - 通过 UISplitViewController 的 iOS 7 导航栏显示褪色的灰色 View