如何将NSArray转换为NSData?

sat*_*ish 80 iphone

任何人都可以告诉我如何转换NSArrayNSData?我有一个NSArray.我需要发送给NSInputStream.为了做到这一点,我需要将其转换NSArrayNSData.

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

Rob*_*ier 189

使用NSKeyedArchiver(这是Garrett帖子的最后一句话):

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
Run Code Online (Sandbox Code Playgroud)

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

请注意,这将创建一个相当难以阅读的属性列表格式,但可以处理各种各样的对象.如果你有一个非常简单的数组(例如字符串),你可能想要使用NSPropertyListSerialization,这会创建一个更简单的属性列表:

NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
Run Code Online (Sandbox Code Playgroud)

如果您希望它在线上可读,那么您还可以传递XML格式常量.


Mic*_*iel 93

在某种程度上相关的说明,这里是如何将NSData转换回NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
Run Code Online (Sandbox Code Playgroud)

  • 确保它是NSKeyedUnarchiver而不是NSKeyedArchiver.使用自动完成时可能很容易犯错误. (5认同)
  • 这个答案加上上面选择的答案应该足以将任何兼容对象存档/取消归档到NSData (2认同)