OC中如何将对象写入文件中

来源:互联网 发布:网络嗅探器 sniffer 编辑:程序博客网 时间:2024/05/21 19:42

在OC中,将字符串、数组、字典等对象写到文件中去,十分方便。但分为系统类对象和我们手动创建的对象,其详细情况如下:

1)对于系统类对象:

 ①NSArray:

   

     NSArray *arr = @[@"zhangsan",@"lisi",@"wangwu",@"zhangmazi"];     //创建一个文件路径。     NSString *homePah = [@"~/array.txt" stringByExpandingTildeInPath];     //将数组的内容写入到指定的文件中     [arr writeToFile:homePah atomically:YES];     //将指定的文件中的内容写到数组中     NSArray *resultArray = [[NSArray alloc ]initWithContentsOfFile:@"/users/qingyun/array.txt"];     NSLog(@"%@",resultArray); 


②NSDictionary:

    

    //创建一个文件路径    NSString *homepath = [@"~/dicResult.txt" stringByExpandingTildeInPath];    NSDictionary *dic = @{@"zhangsan": @"张三",@"lisi":@"李四",@"wangwu":@"王五"};//初始化一个字典    //将该字典写入直接的文件下    [dic writeToFile:homepath atomically:YES];    NSDictionary *getResult = [[NSDictionary alloc] initWithContentsOfFile:homepath];    NSLog(@"%@",getResult);

③系统类的其他对象也是如此,只是写入文件后的格式不一样。


2)非系统类对象,我们手动创建的对象 

对于我们手动创建的对象,不能直接将这些对象内容写到文件中,需要编码、解码然后再序列化、反序列化才能去写到文件中,或从文件中读出来。

比如我们手动创建了一个student类,并初始化

         

   - (id)init    {        self = [super init];        if (self) {            self.name = @"zhangsan";            self.age = 23;            self.stuNo = @"410423";        }        return self;    }

①需要复写编码、解码的方法


    编码:

   - (void)encodeWithCoder:(NSCoder *)acoder    {        [acoder encodeObject:self.name forKey:kKeyName];        [acoder encodeInt64:self.age forKey:kKeyAge];        [acoder encodeObject:self.stuNo forKey:kKeyStuNo];    }


   解码:   

- (id)initWithCoder:(NSCoder *)acoder    {        self = [super init];        if (self) {            self.name = [acoder decodeObjectForKey:kKeyName];            self.age = [acoder decodeInt64ForKey:kKeyAge];            self.stuNo = [acoder decodeObjectForKey:kKeyStuNo];        }        return self;    }


  ②序列化、反序列化

     Student *stu = [[Student alloc]init];//创建一个stu对象并初始化     //将对象编码、序列化并写到指定路径的文件中去     [NSKeyedArchiver archiveRootObject:stu toFile:@"/Users/qingyun/students.txt"];     //从文件中读取并反序列化、解码成字符串     NSString  *strStu = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/qingyun/students.txt"];    NSLog(@"3.%@",strStu);//打印出结果


总结:对于系统类的对象,可以直接将对象写入到指定的文件中去。对于我们手动创建的类对象,需要将对象序列化、反序列化后才能从文件中读取,在序列化、反序列化的过程中,需要先将对象进行编码、解码操作。

(可能有错误,欢迎大家来点评,如转载请说明出处)

0 0