将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上已经可以使用这些方法。