zoukankan      html  css  js  c++  java
  • Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)

    将各种类型的对象存储到文件中,而不仅仅是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成。

    Mac OS X从版本10.2开始支持带键的档案。在此之前,要使用NSArchiver类创建连续的(sequential)归档。连续的归档需要完全按照写入时的顺序读取归档中的数据。

    在带键的归档中,每个归档字段都有一个名称。归档某个对象时,会为它提供一个名称,即键。从归档中检索该对象时,是根据这个键来检索的。这样可以按照任意的顺序将对象写入归档并进行检索。另外,如果向类添加了新的实例变量或删除了实例变量,程序也可以进行处理。

    注意:iPhone SDK中没有提供NSArchiver。如果想在iPhone上使用归档功能,则必须使用NSKeyedArchiver。

    代码示例如下:

     1 #import <Foundation/Foundation.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5 
     6     @autoreleasepool {
     7         
     8         //---------------使用NSKeyedArchiver归档(存储各种类型的对象数据)-------------
     9         //将字典数据写到文件glossary.archive中
    10         NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys:
    11                                   @"A class defined so other class can inherit from it.",@"abstract class",
    12                                   @"To implement all the methods defined in a protocol.",@"adopt",
    13                                   @"Storing an object for later use.",@"archiving",
    14                                   nil
    15                                   ];
    16         [NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
    17         
    18         //将文件glossary.archive中的数据读到字典对象并显示出来
    19         NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
    20         
    21         for(NSString *key in readglossary)
    22             NSLog(@"%@: %@",key,[readglossary objectForKey:key]);
    23     }
    24     return 0;
    25 }

    其中,

     1 [NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"]; 

    将字典glossary写入到文件glossary.archive中。可以为该文件指定任何路径名。在本例中,文件被写入当前目录下。

    之后,又通过

     1 NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"]; 

    方法将创建的归档文件读入执行程序中。这个语句将指定的文件打开并读取文件的内容,该文件必须是以前归档操作的结果。可以为文件指定完整路径名或相对路径名。

    在显示结果之后,可以简单的通过枚举其内容来验证恢复是否成功。

  • 相关阅读:
    [LeetCode]N-Queens
    [LeetCode]Anagrams
    [LeetCode]Permutations II
    [LeetCode]Permutations
    [STL]heap和priority_queue
    [STL]deque和stack、queue
    10、小易记单词--2017网易春招
    29、剑指offer--最小的K个数
    28、剑指offer--数组中出现次数超过一半的数字
    9、涂棋盘--2017网易春招
  • 原文地址:https://www.cnblogs.com/wangshengjia/p/4208470.html
Copyright © 2011-2022 走看看