年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 113913|回复: 2

第二十二讲:Objective-C文件操作之归档

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-1-20 23:02:58 | 显示全部楼层 |阅读模式
    一个最简单的例子:创建一个字典,并将该字典写入到文件
    main.m
    1. //
    2. //  main.m
    3. //  Archiver
    4. //
    5. //  Created by yusian on 14-1-20.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. #define PATH @"/tmp/file.plist"
    10. int main(int argc, const char * argv[])
    11. {
    12.     @autoreleasepool {
    13.         
    14.         NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", nil];
    15.         [dict writeToFile:PATH  atomically:YES];
    16.         [dict release];
    17.     }
    18.     return 0;
    19. }
    复制代码
    运行结果,在/tmp/目录中生成一个文件“file.plist”: file.plist.zip (354 Bytes, 下载次数: 0)
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-1-21 21:41:01 | 显示全部楼层
    本帖最后由 Sian 于 2014-1-21 21:44 编辑

    使用NSData进行文件归档操作,可保存不同类型的数据
    1、创建一个String类、Array类、Dictionary类,并初始化赋值,存储到Data中,写入文件;
    2、从文件中读取数据;

    main.m
    1. //
    2. //  main.m
    3. //  Archiver
    4. //
    5. //  Created by yusian on 14-1-20.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. #define PATH @"/tmp/file.plist"
    10. int main(int argc, const char * argv[])
    11. {
    12.     @autoreleasepool {
    13.         
    14.         NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", nil];
    15.         NSArray * array = [[NSArray alloc] initWithObjects:@"One", @"Two", nil];
    16.         NSString * str = [[NSString alloc] initWithString:@"This is a TestString"];
    17.         NSMutableData * data = [[NSMutableData alloc] init];
    18.         NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    19.         
    20.         [archiver encodeObject:dict forKey:@"dict"];
    21.         [archiver encodeObject:array forKey:@"array"];
    22.         [archiver encodeObject:str forKey:@"str"];
    23.         [archiver finishEncoding];
    24.         
    25.         [data writeToFile:PATH atomically:YES];
    26.         
    27.         [archiver release];
    28.         [data release];
    29.         [str release];
    30.         [array release];
    31.         
    32.     }
    33.     return 0;
    34. }
    复制代码
    运行结果即在/tmp生成file.plist文件,该文件用文本编辑器无法直接打开,但可以用xcode读取,如图所示: QQ20140121-1@2x.png

  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-1-21 22:02:14 | 显示全部楼层
    Sian 发表于 2014-1-21 21:41
    使用NSData进行文件归档操作,可保存不同类型的数据
    1、创建一个String类、Array类、Dictionary类,并初始 ...

    OK,如果我想从文件中读取数据,如何在程序中实现呢
    代码中有用到Archiver进行归档,那么相对应的就有UnArchiver进行解档:
    main.m
    1. //
    2. //  main.m
    3. //  Archiver
    4. //
    5. //  Created by yusian on 14-1-20.
    6. //  Copyright (c) 2014年 yusian. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. #define PATH @"/tmp/file.plist"
    10. int main(int argc, const char * argv[])
    11. {
    12.     @autoreleasepool {
    13.         NSData * data = [[NSData alloc] initWithContentsOfFile:PATH];
    14.         NSKeyedUnarchiver * archiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    15.         
    16.         NSString * str = [archiver decodeObjectForKey:@"str"];
    17.         NSArray * array = [archiver decodeObjectForKey:@"array"];
    18.         NSDictionary * dict = [archiver decodeObjectForKey:@"dict"];
    19.         NSLog(@"%@",str);
    20.         NSLog(@"%@",array);
    21.         NSLog(@"%@",dict);
    22.         [data release];
    23.         [archiver release];
    24.         
    25.     }
    26.     return 0;
    27. }
    复制代码
    输出结果:
    1. 2014-01-21 22:01:13.374 Archiver[1794:303] This is a TestString
    2. 2014-01-21 22:01:13.377 Archiver[1794:303] (
    3.     One,
    4.     Two
    5. )
    6. 2014-01-21 22:01:13.379 Archiver[1794:303] {
    7.     1 = One;
    8.     2 = Two;
    9.     3 = Three;
    10. }
    11. Program ended with exit code: 0
    复制代码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-2 18:27 , Processed in 0.049814 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表