如何将NSArray转换为NSData?


82

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

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

Answers:


190

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

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

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

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

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

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


93

在某种程度上相关的注释上,这是将NSData转换回NSArray的方法:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

5
确保它是NSKeyedUnarchiver而不是NSKeyedArchiver。使用自动完成功能时很容易犯一个错误。
肖恩

2
此答案以及从上面选择的答案应该足以向NSData归档/从NSData归档/取消归档任何兼容的对象
Scott D


3

我用了这段代码。

 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];

1

你可以这样做-

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

1

在iOS 9+中,请使用此功能:

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

iOS 8不推荐使用此版本的较旧版本。


1

斯威夫特:

let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.