如何将NSArray转换为NSData?

谁能告诉我如何将NSArray转换为NSData? 我有一个NSArray。 我需要将其发送到NSInputStream。 为了做到这一点,我需要将NSArray转换为NSData。 请帮助我,我卡在这里。

使用NSKeyedArchiver(这是Garrett链接的最后一个句子):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

请注意, array中的所有对象都必须符合NSCoding协议。 如果这些是自定义对象,那么这意味着您需要阅读编码和解码对象 。

请注意,这将创build一个相当难读的属性列表格式,但可以处理非常广泛的对象。 如果你有一个非常简单的数组(例如string),你可能想要使用NSPropertyListSerialization,这会创build一个更简单的属性列表:

 NSString *error; NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error]; 

还有一个XML格式常量,如果你希望它可以在线上读取,你可以通过。

在一个有点相关的说明,这里是如何将NSData转换回NSArray:

 NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data] 

我不知道这是否会帮助你,但它是一个NSMutableArray NSData的链接。

你可以这样做-

 NSArray *array= [NSArray array]; NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array]; 

我用这个代码。

  NSError *error; NSMutableData *jsonData = [[NSJSONSerialization dataWithJSONObject:yourDemoArray options:0 // Pass 0 if you don't care about the readability of the generated string error:&error] copy]; 

在iOS 9+使用这个请:

 NSArray *array = [[NSArray alloc] init]; NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil]; 

这个旧版本在iOS 8中已经被弃用了。