OC第八天笔记2016年03月23日(周三)A.M

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC第八天笔记2016年03月23日(周三)A.M相关的知识,希望对你有一定的参考价值。

1.     NSFileManager:
----------------------main---------------------------
  1 <font size="3">#import <Foundation/Foundation.h>
  2 #import "Student.h"
  3 int main(int argc, const char * argv[]) {
  4     @autoreleasepool {
  5         
  6         //1. NSFileManager:文件管理器类(用于管理文件或者目录)
  7         //2. 文件路径:用字符串存储
  8         //3. 文件路径:绝对路径、相对路径。
  9         
 10         //4.NSCoding协议:将数据持久化(即将内存中的数据保存到文件)
 11         //5. NSCoder的派生类:NSKeyedArchiver、NSKeyedUnarchiver
 12         
 13         Student* s = [[Student alloc] initWithName:@"张三" andAge:20];
 14         Student* s1 = [[Student alloc] initWithName:@"李四" andAge:21];
 15         Student* s2 = [[Student alloc] initWithName:@"王五" andAge:22];
 16         
 17         //将学生s信息持久化(保存在文件中)二进制文件 xml文件 json文件 数据库文件
 18         
 19         //5.1 NSKeyedArchiver  归档
 20         [NSKeyedArchiver archiveRootObject:s toFile:@"a.txt"];
 21         
 22         //集合:注意,集合以及几个内对象所属类中需要遵循NSCoding协议并实现方法。
 23         NSMutableArray* array = [[NSMutableArray alloc] initWithObjects: s, s1, s2, nil];
 24         [NSKeyedArchiver archiveRootObject:array toFile:@"b.txt"];
 25         
 26         NSArray* array1 = [NSArray arrayWithObjects:@"Hello",@"World",nil];
 27         [NSKeyedArchiver archiveRootObject:array1 toFile:@"c.txt"];
 28         //如果即将归档的集合元素所属类中没有遵循NSCoding协议,程序会出现崩溃。
 29         
 30         //5.2 NSKeyedUnarchiver 解档
 31         id object = [NSKeyedUnarchiver unarchiveObjectWithFile:@"b.txt"];
 32         //参数文件路径(文件需要存在)返回值:存储在文件中的数据
 33         if ([object isKindOfClass:[NSMutableArray class]]) {
 34             for (id astudent in object) {
 35                 NSLog(@"%@",astudent);
 36                 [astudent print];
 37             }
 38         }
 39         
 40         [array release];
 41         [s dealloc];
 42         [s1 dealloc];
 43         
 44         // /Users/fang/a.txt
 45         NSFileManager* fm = [NSFileManager defaultManager];
 46         //6. 文件管理器类对象
 47         
 48         NSString* path = NSHomeDirectory();
 49         NSLog(@"path:%@",path);
 50         [path stringByAppendingPathComponent:@"a.txt"];
 51         //用于追加路径组成部分,分隔符/会自动添加
 52 //        [pathstringByAppendingFormat:@"/a.txt"];
 53 //        //用于实现字符串的追加,分隔符/需要手动添加
 54         
 55         //7. 创建文件
 56         //参数一:文件路径 参数二:文件内容 参数三:文件属性
 57         BOOL y = [fm createFileAtPath:path contents:nil attributes:nil];
 58         //@"/Users/fang/a.txt" 硬编码路径(尽量不使用)
 59         if (y) {
 60             NSLog(@"文件创建成功");
 61         }
 62         
 63         //8. 判断指定文件是否存在
 64         y = [fm fileExistsAtPath:@"a.txt"];//参数:文件路径
 65         if (y) {
 66             NSLog(@"文件在当前目录中存在!");
 67         }
 68         else
 69             NSLog(@"文件在当前目录中不存在!");
 70         //用途:用作文件内容拷贝
 71         NSError* error;
 72         
 73         //9. 判读文件是否存在 存在先删除目的文件再拷贝
 74         if ([fm fileExistsAtPath:@"ac.txt"]) {
 75             [fm removeItemAtPath:@"ac.txt" error:&error];
 76         }
 77         //10. 文件内容拷贝
 78         //a.txt 单个学生的信息。
 79         y = [fm copyItemAtPath:@"a.txt" toPath:@"ac.txt" error:&error];
 80         //参数一:源文件路径  参数二:目的文件路径  参数三: 接收错误
 81         if (y) {
 82             NSLog(@"文件拷贝成功!");
 83         }
 84         else
 85             NSLog(@"文件拷贝失败!");
 86         Student* ac = [NSKeyedUnarchiver unarchiveObjectWithFile:@"ac.txt"];
 87         [ac print];
 88         //如果目的文件已存在,则拷贝失败。解决方案 :先判断目的文件是否存在 然后删除目的文件,再进行拷贝
 89         
 90         /*
 91         
 92         BOOL y1 = [fmfileExistsAtPath:@"a.txt"];
 93         BOOL y2 = [fmfileExistsAtPath:@"ac.txt"];
 94         if (!y1  || y2) {
 95             if(!y1)
 96             {
 97                 //创建源文件
 98             }
 99             else
100             {
101                 //删除目的文件
102             }
103         }
104         */
105     }
106     return 0;
107 }</font>

----------------------Student.h---------------------------

技术分享
 1 #import <Foundation/Foundation.h>
 2 @interface Student : NSObject
 3 {
 4     NSString* name;
 5     int age;
 6 }
 7 @property(nonatomic,retain)NSString* name;
 8 @property(nonatomic,assign)int age;
 9 -(id)initWithName:(NSString*)_name andAge:(int)_age;
10 -(void)print;
11 @end
View Code

----------------------Student.m---------------------------

技术分享
 1 <font size="3">#import "Student.h"
 2 @implementation Student
 3 @synthesize name,age;
 4 - (id)initWithCoder:(NSCoder *)aDecoder
 5 {
 6     if(self = [super init]){
 7         self.name = [aDecoder decodeObjectForKey:@"NAME"];//键必须与编码时指定的键一致。
 8         self.age = [[aDecoder decodeObjectForKey:@"AGE"] intValue];
 9     }
10     return self;
11 }
12 -(id)initWithName:(NSString*)_name andAge:(int)_age
13 {
14     if (self = [super init]) {
15         self.name = _name;
16         self.age = _age;
17     }
18     return self;
19 }
20 //将本类对象进行编码(二进制)
21 -(void)encodeWithCoder:(NSCoder*) aCoder
22 {
23     //编码 对对象进行编码:本质就是对对象的实例变量进行编码。
24     [aCoder encodeObject:self.name forKey:@"NAME"];//键值编码
25     [aCoder encodeObject:[NSNumber numberWithInt:self.age] forKey:@"AGE"];
26 }
27 -(void)print
28 {
29     NSLog(@"name%@  age:%d",name,age);
30 }
31 -(void)dealloc
32 {
33     [name release];
34     [super dealloc];
35 }
36 @end
37 </font>
View Code

 

以上是关于OC第八天笔记2016年03月23日(周三)A.M的主要内容,如果未能解决你的问题,请参考以下文章

C语言第八天笔记2016年01月22日(周五)A.M

iPhone 第二天笔记2016年03月30日(周三)A.M 秒表计时登录验证+页面跳转

OC第六天笔记2016年03月21日(周一)A.M

OC第七天笔记2016年03月22日(周二)A.M

OC第九天笔记2016年03月24日(周四)A.M

OC第四天笔记2016年03月18日(周五)A.M