【发布时间】:2009-08-17 04:56:22
【问题描述】:
谁能告诉我如何将NSArray 转换为NSData?我有一个NSArray。我需要将它发送到NSInputStream。为此,我需要将NSArray 转换为NSData。
请帮帮我,我被困在这里了。
【问题讨论】:
标签: iphone
谁能告诉我如何将NSArray 转换为NSData?我有一个NSArray。我需要将它发送到NSInputStream。为此,我需要将NSArray 转换为NSData。
请帮帮我,我被困在这里了。
【问题讨论】:
标签: iphone
使用 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 格式常量。
【讨论】:
在一些相关的说明中,以下是将 NSData 转换回 NSArray 的方法:
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data]
【讨论】:
我使用了这个代码。
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];
【讨论】:
斯威夫特:
let data = NSKeyedArchiver.archivedData(withRootObject: jsonArray)
print(data)
【讨论】:
你可以这样做-
NSArray *array= [NSArray array];
NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:array];
【讨论】:
请在 iOS 9+ 中使用:
NSArray *array = [[NSArray alloc] init];
NSData *data = [NSPropertyListSerialization dataWithPropertyList:array format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
旧版本在 iOS 8 中已弃用。
【讨论】:
斯威夫特 5
let data = try! NSKeyedArchiver.archivedData(withRootObject: array, requiringSecureCoding: true)
【讨论】: