将各类类型的对象存储到文件中,而不单单是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类建立带键(keyed)的档案来完成。数组
Mac OS X从版本10.2开始支持带键的档案。在此以前,要使用NSArchiver类建立连续的(sequential)归档。连续的归档须要彻底按照写入时的顺序读取归档中的数据。ide
在带键的归档中,每一个归档字段都有一个名称。归档某个对象时,会为它提供一个名称,即键。从归档中检索该对象时,是根据这个键来检索的。这样能够按照任意的顺序将对象写入归档并进行检索。另外,若是向类添加了新的实例变量或删除了实例变量,程序也能够进行处理。spa
注意:iPhone SDK中没有提供NSArchiver。若是想在iPhone上使用归档功能,则必须使用NSKeyedArchiver。.net
代码示例以下:orm
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //---------------使用NSKeyedArchiver归档(存储各类类型的对象数据)------------- //将字典数据写到文件glossary.archive中 NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys: @"A class defined so other class can inherit from it.",@"abstract class", @"To implement all the methods defined in a protocol.",@"adopt", @"Storing an object for later use.",@"archiving", nil ]; [NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"]; //将文件glossary.archive中的数据读到字典对象并显示出来 NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"]; for(NSString *key in readglossary) NSLog(@"%@: %@",key,[readglossary objectForKey:key]); } return 0; }
其中,对象
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
将字典glossary写入到文件glossary.archive中。能够为该文件指定任何路径名。在本例中,文件被写入当前目录下。blog
以后,又经过字符串
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
方法将建立的归档文件读入执行程序中。这个语句将指定的文件打开并读取文件的内容,该文件必须是之前归档操做的结果。能够为文件指定完整路径名或相对路径名。get
在显示结果以后,能够简单的经过枚举其内容来验证恢复是否成功。it