如何将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中已经被弃用了。