Iphone 如何将NSArray转换为NSData?

Iphone 如何将NSArray转换为NSData?,iphone,Iphone,谁能告诉我如何将NSArray转换为NSData?我有一个NSArray。我需要将其发送到NSInputStream。为此,我需要将NSArray转换为NSData 请帮帮我,我被困在这里。我不确定这是否对你有帮助,但这是一个链接。使用NSKeyedArchiver(这是post Garrett链接的最后一句话): 请注意,array中的所有对象必须符合NSCoding协议。如果这些是自定义对象,则意味着您需要仔细阅读 请注意,这将创建一个相当难读取的属性列表格式,但可以处理范围非常广泛的对象。

谁能告诉我如何将
NSArray
转换为
NSData
?我有一个
NSArray
。我需要将其发送到
NSInputStream
。为此,我需要将
NSArray
转换为
NSData


请帮帮我,我被困在这里。

我不确定这是否对你有帮助,但这是一个链接。

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

请注意,
array
中的所有对象必须符合
NSCoding
协议。如果这些是自定义对象,则意味着您需要仔细阅读

请注意,这将创建一个相当难读取的属性列表格式,但可以处理范围非常广泛的对象。如果您有一个非常简单的数组(例如字符串),则可能需要使用NSPropertyListSerialization,这将创建一个稍微简单一点的属性列表:

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

还有一个XML格式常量,如果您希望它在线路上可读,您可以传递它。

在一个相关的注释中,以下是如何将NSData转换回NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
你可以这样做-

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中不推荐使用此版本的旧版本。

Swift:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)

感谢您的快速回复,我之前已经检查过,但没有太大帮助。请确保它是NSKEYEDANRCHIVER而不是NSKeyedArchiver。使用“自动完成”时很容易出错。此答案加上上面选择的答案应足以将任何兼容对象存档/取消存档到NSData或从NSData存档/取消存档
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)