关闭

oc基础知识5:归档

标签: objective-c归档NSKeyArchiverNSKeyUnarchiver
865人阅读 评论(0) 收藏 举报
分类:

    1、XML属性列表

    对于NSString、NSArray 、NSDictionary、 NSNumber、 NSDate、 NSData 类以及他们的变体可以使用在这些类中的方法将属性列表写入文件中,根据字典创建属性列表是,字典中的间必须全都是NSStriing对象。数组中的元素或字典中的 值可以是其它类型的。(writrToFile:atomically:方法中第一个冒号后面是要读入的文件名或文件路径,而atoically后面跟的参数的值是BOOL类型的,用于决定是否先将文件内容保存在临时文件中,当文件保存成功后,再将临时文件和原始文件交换,防止原始文件被破坏)

     要将文件中的属性列表读入程序时,如果要读回的是字典,用dictionaryWithContentsOfFile:方法,要读回数组,用arrayWithContentsOfFile:方法;要读回数据,用dataWithContentsOfFile:方法;要读回字符串,用stringWithContentsOfFile:方法;但是,这些函数有一个缺点:他们不会返回任何错误信息,如果不能加载文件,只能从方法中得到nil只能,不能确定出现了哪种错误。

 

例子:

 

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[])

{

    @autoreleasepool {
       
       //定义并初始化数组
         
        NSArray *array;
       
        array=[NSArray arrayWithObjects:@"one",@"two",@"three", nil];
        
       //将数组读入文件xml.txt文件中
       
       [array writeToFile:@"/Users/puke/Desktop/xml.txt" atomically:YES];
       
      //定义一个新数组,将数组从文件中读到新数组中,并输出
      
        NSArray *arr;
       
        arr=[NSArray arrayWithContentsOfFile:@"/Users/puke/Desktop/xml.txt"];
       
        NSLog(@"
%@",arr);

  
         }
   
        return 0;

}

 

 

 

      2、用NSKeyedArchiver归档

      对于以上的基本oc 类对象,以及嵌套的对象,可以用NSKeyedArchiver进行归档;将归档文件读到程序中,用NSKeyedUnarchiver  方法;

      下面是一个例子:

 

       

#import <Foundation/Foundation.h>

#import <Foundation/NSKeyedArchiver.h>

int main(int argc,const char *argv[])

{
    @autoreleasepool{
       
         //创建并初始化一个字典类型的对象
      
           NSDictionary *dic=[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];
      
       //将字典内容归档到文件dic.txt中
      
         [NSKeyedArchiver archiveRootObject:dic toFile:@"/Users/puke/Desktop/dic.txt"];
       
      //创建一个新字典,将文件中的内容读到新字典中,并输出
      
        NSDictionary *new;
       
        new=[NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/puke/Desktop/dic.txt"];
       
       
         for(NSString *key in new)
      
         {
           
             NSLog(@"%@ :%@",key,[new objectForKey:key]);
     
          }
       
  
       }
   
        return 0;

}

 

 

       3、解码和编码

       对与不属于以上列出的对象的对象,要遵守NSCoding协议,在类定义中添加encodeWithCoder:方法和initWithCoder:方法进行解码和编码,以便告知系统如何归档;

       

      

     

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:148943次
    • 积分:2574
    • 等级:
    • 排名:第14292名
    • 原创:109篇
    • 转载:34篇
    • 译文:0篇
    • 评论:15条
    最新评论