1使用plist文件存储数据
首先要知道的是,使用plist存储数据,只能存储OC自带的数据字典和数组,无法存储自定义的数据model,例子看info.plist的样式就知道了
将数据存储到plist文件中
//获取本地沙盒路径
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//获取完整路径
NSString *docPath = [path objectAtIndex:0];
// 3.新建数据
NSMutableArray *data = [[NSMutableArray alloc] initWithObjects:@"232",@"jee", nil];
NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
NSString *str = @"21323";
[data insertObject:str atIndex:0];
[data writeToFile:filepath atomically:YES];
读取并修改plist文件
//获取本地沙盒路径
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//获取完整路径
NSString *docPath = [path objectAtIndex:0];
// 3.文件路径
NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];
// 4.读取数据
NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile:filepath];
// 5.修改数据
NSString *str = @"wwwww";
[data insertObject:str atIndex:0];
[data writeToFile:filepath atomically:YES];
NSLog(@"%@", data);
2.使用归档存储数据
使用归档存储就可以存储自定义的model数据了
首先将让model遵循NSCoding协议
#import <Foundation/Foundation.h>
@interface SubData : NSObject<NSCoding>
@property (copy, nonatomic) NSString * name;
@property (copy, nonatomic) NSString * code;
@property (copy, nonatomic) NSString * imgUrl;
@property (copy, nonatomic) NSString * sub;
@property (copy, nonatomic) NSString * url;
@end
然后在m文件中
// 当将一个自定义对象保存到文件的时候就会调用该方法
// 在该方法中说明如何存储自定义对象的属性
// 也就说在该方法中说清楚存储自定义对象的哪些属性
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.code forKey:@"code"];
[aCoder encodeObject:self.imgUrl forKey:@"imgUrl"];
[aCoder encodeObject:self.sub forKey:@"sub"];
[aCoder encodeObject:self.url forKey:@"url"];
}
// 当从文件中读取一个对象的时候就会调用该方法
// 在该方法中说明如何读取保存在文件中的对象
// 也就是说在该方法中说清楚怎么读取文件中的对象
- (id)initWithCoder:(NSCoder *)aDecoder
{
//注意:在构造方法中需要先初始化父类的方法
if (self=[super init]) {
self.name=[aDecoder decodeObjectForKey:@"name"];
self.code=[aDecoder decodeObjectForKey:@"code"];
self.imgUrl=[aDecoder decodeObjectForKey:@"imgUrl"];
self.sub=[aDecoder decodeObjectForKey:@"sub"];
self.url=[aDecoder decodeObjectForKey:@"url"];
}
return self;
}
这样在model中的设置就完成了,接下来是使用时的代码
将数据存储到文件中
//获取文件路径
NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *path=[docPath stringByAppendingPathComponent:@"recentlyUsed.archiver"];
NSMutableArray *subDataArray = [[NSMutableArray alloc] init];
[subDataArray insertObject:model atIndex:0];
//将自定义的对象保存到文件中,调用NSKeyedArchiver的工厂方法 archiveRootObject: toFile: 方法
[NSKeyedArchiver archiveRootObject:subDataArray toFile:path];
解档
//1.获取文件路径
NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *path=[docPath stringByAppendingPathComponent:@"recentlyUsed.archiver"];
//2.从文件中读取对象,解档对象就调用NSKeyedUnarchiver的一个工厂方法 unarchiveObjectWithFile: 即可。
if([GYGeneralTools isFileExist:@"recentlyUsed.archiver"]) {
self.recentlyUsedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
}