UI本地存储数据结构文件

UI中可以将常用存储类型

1.字符串 

2.字典

3.数组

4.类


基本知识

读写文件需要知道文件的路径,我们这里用NSSearchPathForDirectInDomains方法实现

<span style="font-size:18px;">    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *path = [array firstObject];
    NSString *path_file = [NSString stringWithFormat:@"%@%@",path,@"/test.txt.plist"];
    NSLog(@"%@",path);</span>


1.字符串的本地存储

1)写操作

    [str writeToFile:path_file atomically:YES encoding:NSUTF8StringEncoding error:&error];

2)读操作

    str = [NSString stringWithContentsOfFile:path_file encoding:NSUTF8StringEncoding error:&error];
    NSLog(@"str : %@",str);
2.字典的本地存储

1)写操作

    [dict writeToFile:path_file atomically:YES encoding:NSUTF8StringEncoding error:&error];

2)读操作

   <span style="font-size:14px;"> str = [NSString </span><span style="font-size:14px;">dictionaryWithContentsOfFile:path_file encoding:NSUTF8StringEncoding error:&error];
    NSLog(@"str : %@",str);</span>

3.数组的本地存储

1)写操作

    [array writeToFile:path_file atomically:YES encoding:NSUTF8StringEncoding error:&error];

2)读操作

   <span style="font-size:14px;"> str = [NSString </span><span style="font-size:14px;">arrayWithContentsOfFile:path_file encoding:NSUTF8StringEncoding error:&error];
    NSLog(@"str : %@",str);</span>

4.类的本地存储

首先如果你要存储的数据中有自定义类的存在,用上面的方法无法存文件

举例

model.h

@interface Model : NSObject <NSCoding>
@property (nonatomic,retain) NSString *name;
@property (nonatomic,retain) NSString *sex;
@property (nonatomic,retain) NSString *age;
- (id) initWithName:(NSString *)name  Sex:(NSString *)sex Age:(NSString *)age;
+ (id)modelWithName:(NSString *)name Sex:(NSString *)sex Age:(NSString *)age;

@end
model.m

//归档协议 序列化协议
- (void)encodeWithCoder:(NSCoder *)aCoder{
    
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
    //NSNumber *number = [NSNumber numberWithInt:_age];
    [aCoder encodeObject:self.age forKey:@"age"];

}
//解挡,反序列化
- (id)initWithCoder:(NSCoder *)aDecoder{
 
    if (self = [super init]) {
        
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
        //NSNumber *number = nil;
        self.age = [aDecoder decodeObjectForKey:@"age"];
       // self.age = [number intValue]];
    }
    return self;

//归档 自己创建model类型对象为二进制,通过二进制格式存储
- (void)archveObject{
    
    NSData *date = [NSKeyedArchiver archivedDataWithRootObject:_model];
    
    NSArray *path_array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [path_array firstObject];
    NSString *str = [NSString stringWithFormat:@"%@/data",path];
    [date writeToFile:str atomically:YES];
    
}
//将归档后的二进制文件解当为 对应的model对象
- (void)getObject
{
    NSArray *path_array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [path_array firstObject];
    NSString *str = [NSString stringWithFormat:@"%@/data",path];
    
    NSData *data = [NSData dataWithContentsOfFile:str];
    Model *model = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    NSLog(@"%@",model);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值