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);
}