将 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
plist中的NSdictionary对象需要是数组的数组,怎么转换?