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];
//获取本地沙盒路径 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]; }