Sian 发表于 2014-1-20 23:02:58

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

一个最简单的例子:创建一个字典,并将该字典写入到文件
main.m
//
//main.m
//Archiver
//
//Created by yusian on 14-1-20.
//Copyright (c) 2014年 yusian. All rights reserved.
//

#import <Foundation/Foundation.h>
#define PATH @"/tmp/file.plist"

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

    @autoreleasepool {
      
      NSDictionary * dict = [ initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", nil];
      ;
      ;
    }
    return 0;
}
运行结果,在/tmp/目录中生成一个文件“file.plist”:
内容为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>1</key>
        <string>One</string>
        <key>2</key>
        <string>Two</string>
        <key>3</key>
        <string>Three</string>
</dict>
</plist>

Sian 发表于 2014-1-21 21:41:01

本帖最后由 Sian 于 2014-1-21 21:44 编辑

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

main.m
//
//main.m
//Archiver
//
//Created by yusian on 14-1-20.
//Copyright (c) 2014年 yusian. All rights reserved.
//

#import <Foundation/Foundation.h>
#define PATH @"/tmp/file.plist"

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

    @autoreleasepool {
      
      NSDictionary * dict = [ initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", nil];
      NSArray * array = [ initWithObjects:@"One", @"Two", nil];
      NSString * str = [ initWithString:@"This is a TestString"];
      NSMutableData * data = [ init];
      NSKeyedArchiver * archiver = [ initForWritingWithMutableData:data];
      
      ;
      ;
      ;
      ;
      
      ;
      
      ;
      ;
      ;
      ;
      
    }
    return 0;
}运行结果即在/tmp生成file.plist文件,该文件用文本编辑器无法直接打开,但可以用xcode读取,如图所示:

Sian 发表于 2014-1-21 22:02:14

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

OK,如果我想从文件中读取数据,如何在程序中实现呢
代码中有用到Archiver进行归档,那么相对应的就有UnArchiver进行解档:
main.m
//
//main.m
//Archiver
//
//Created by yusian on 14-1-20.
//Copyright (c) 2014年 yusian. All rights reserved.
//

#import <Foundation/Foundation.h>
#define PATH @"/tmp/file.plist"

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

    @autoreleasepool {
      NSData * data = [ initWithContentsOfFile:PATH];
      NSKeyedUnarchiver * archiver = [ initForReadingWithData:data];
      
      NSString * str = ;
      NSArray * array = ;
      NSDictionary * dict = ;
      NSLog(@"%@",str);
      NSLog(@"%@",array);
      NSLog(@"%@",dict);
      ;
      ;
      
    }
    return 0;
}

输出结果:
2014-01-21 22:01:13.374 Archiver This is a TestString
2014-01-21 22:01:13.377 Archiver (
    One,
    Two
)
2014-01-21 22:01:13.379 Archiver {
    1 = One;
    2 = Two;
    3 = Three;
}
Program ended with exit code: 0
页: [1]
查看完整版本: 第二十二讲:Objective-C文件操作之归档