将 NSDictionary 对象转换为 NSData 对象,反之亦然

Posted

技术标签:

【中文标题】将 NSDictionary 对象转换为 NSData 对象,反之亦然【英文标题】:converting NSDictionary object to NSData object and vice-versa 【发布时间】:2010-07-01 11:39:21 【问题描述】:

我必须将NSDictionary 对象转换为NSData,并且我必须从NSData 对象中得到相同的NSDictionary。我该怎么办?

【问题讨论】:

【参考方案1】:

使用 NSKeyedArchiver

将 NSDictionary 转换为 NSData

NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:YOURDICTIONARY forKey: YOURDATAKEY];
archiver finishEncoding];
[data writeToFile:YOURFILEPATH atomically:YES];
[data release];
[archiver release];

从存储的 NSData 中取回 NSDictionary

NSData *data = [[NSMutableData alloc]initWithContentsOfFile:YOURFILEPATH];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
YOURDICTIONARY = [unarchiver decodeObjectForKey: YOURDATAKEY];
[unarchiver finishDecoding];
[unarchiver release];
[data release];

【讨论】:

【参考方案2】:

罗伯特回答的一个更简单的版本:

[NSKeyedArchiver archiveRootObject:YOURDICTIONARY toFile:YOURFILEPATH];

相应地:

YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithFile:YOURFILEPATH];

或者按照最初设定的方式回答问题,而不将文件归入事物中:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YOURDICTIONARY];
...
YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithData:data];

都是工厂方法,所以不管有没有ARC,代码都是一样的;使用的方法从 OS X v10.2 和 ios 第一天开始就可以使用。

【讨论】:

以上是关于将 NSDictionary 对象转换为 NSData 对象,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

Obj-C:将对象数组转换为 NSDictionary 以与 JSONRepresentation 一起使用

将包含 NSArray 的 NSDictionary 转换为 JSON

将 NSData 转换为 NSDictionary

plist中的NSdictionary对象需要是数组的数组,怎么转换?

使用 Swift 将 JSON 字符串转换为 NSDictionary

无法将表达式的类型“NSDictionary”转换为类型“StringLiteralConvertible”