将NSDictionary对象转换为NSData对象,反之亦然
我必须将一个NSDictionary
对象转换成NSData
,而且我必须从NSData
对象中获取相同的NSDictionary
。 我应该怎么做呢?
使用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];
罗伯特的答案简单得多:
[NSKeyedArchiver archiveRootObject:YOURDICTIONARY toFile:YOURFILEPATH];
而且,相应地:
YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithFile:YOURFILEPATH];
或者按照原来的方式来回答这个问题,而不是将一个文件转换成一些东西:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YOURDICTIONARY]; ... YOURDICTIONARY = [NSKeyedUnarchiver unarchiveObjectWithData:data];
这是所有的工厂方法,所以它是相同的代码有或没有ARC; 从第一天起,OS X v10.2和iOS上已经可以使用这些方法。