iOS -使用属性列表序列化容易对象-创建plist表,向plist表添加数据
iOS -使用属性列表序列化简单对象-创建plist表,向plist表添加数据
(2)


也可以直接创建plist表,对表进行操作,增添数据。这里使用代码创建
plist表里面的对象:
NSString,NSArray,NSDictionary,NSNumber,NSData,NSDate,可修改类的对象,嵌套对象
写入plist表的方法:writeToFile: atomically:或者writeToURL: atomically:
(1)创建一个student类:
@property (copy,nonatomic) NSString *studentName; @property (assign,nonatomic) int studentID; @property (copy,nonatomic) NSString *studentSex; @property (copy,nonatomic) NSString *studentImagePath;//照片的文件路径 -(id)initWithName:(NSString *)name ID:(int)studentID Sex:(NSString *)sex Photo:(NSString *)imagePath; -(NSString *)description;
-(id)initWithName:(NSString *)name ID:(int)studentID Sex:(NSString *)sex Photo:(NSString *)imagePath { if ((self = [super init])) { self.studentName = name; self.studentID = studentID; self.studentSex = sex; self.studentImagePath = imagePath; } return self; } -(NSString *)description { return [NSString stringWithFormat:@"name:%@,id:%d,sex:%@,imagepath:%@",self.studentName,self.studentID,self.studentSex,self.studentImagePath]; } -(void)dealloc { self.studentName = nil; self.studentSex = nil; self.studentImagePath = nil; }
(2)
//创建初始学生数组 -(NSArray *)createStudentArray { Students *seal = [[Students alloc] initWithName:@"seal" ID:110401 Sex:@"girl" Photo:@"seal.png"]; Students *willing = [[Students alloc] initWithName:@"willing" ID:110402 Sex:@"boy" Photo:@"willing.png"]; Students *lisa = [[Students alloc] initWithName:@"lisa" ID:110403 Sex:@"girl" Photo:@"lisa.png"]; NSArray *studentArray = @[seal,willing,lisa]; return studentArray; }
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"AppHome:\n%s\n",[NSHomeDirectory() UTF8String]);//获取应用程序Home目录的全路径,打印出来,复制路径到《前往文件夹》去看看 //指定属性列表文件路径 //Documents目录用于保存程序中的文件,该目录主要保存应用程序在启动时加载的文件 //获取程序的Documents(文件)目录(Directory)路径(path)-Home目录中搜索Documents目录并返回其全路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//DocumentDirectory表示搜索的是Documents目录,NSUserDomainMask,表示搜索范围紧在应用程序沙盒(Home目录)内,最后一个bool值表示是否将波浪号转换为实际路径。满足条件的路径会被放在这个数组里面。 NSString *documentsDirPath = [paths objectAtIndex:0];//获取文件目录的路径。由于iOS应用程序只会有一个Documents目录,所有直接返回数组的第一个成员就可以了 NSString *studentFilePath = [documentsDirPath stringByAppendingPathComponent:@"student.plist"]; NSFileManager *fileManager = [NSFileManager defaultManager];//获取NSFileManager单件对象,用于操作文件。(iOS应用程序通过文件管理器对象对文件系统进行各种高层操作) BOOL isDirectory; //判断AppHome/Documents/student.plist文件是否存在(txt纯文本) if ([fileManager fileExistsAtPath:studentFilePath isDirectory:&isDirectory] && !isDirectory) { NSLog(@"存在 student.plist !!"); }else{ NSLog(@"不存在 student.plist"); NSArray *studentArray = [self createStudentArray];//创建student对象 if ([studentArray writeToFile:studentFilePath atomically:YES]) { NSLog(@"将student数组保存为属性列表文件成功!!"); }else{ NSLog(@"将student数组保存为属性列表文件不成功"); } // 使用kvc构建字段数组 NSArray *studentIDArray = [studentArray valueForKey:@"studentID"]; NSArray *studentNameArray = [studentArray valueForKey:@"studentName"]; NSArray *studentSexArray = [studentArray valueForKey:@"studentSex"]; NSArray *studentImagePathArray = [studentArray valueForKey:@"studentImagePath"]; NSArray *studentList = @[studentNameArray,studentIDArray,studentSexArray,studentImagePathArray]; // 这一种办法写入不成功,因为并不是所有对象都可以保存到plist里面的。 (NSString,NSArray,NSDictionary,NSNumber,NSData,NSDate,可修改类的对象,嵌套对象) // NSArray *seal = [studentArray objectAtIndex:0]; // NSArray *willing = [studentArray objectAtIndex:1]; // NSArray *lisa = [studentArray objectAtIndex:2]; // NSArray *studentList = @[seal,willing,lisa]; // // // NSLog(@"studentList:\n%s\n",[[studentList description] UTF8String]); if ([studentList writeToFile:studentFilePath atomically:YES]) { NSLog(@"将student数组保存为属性列表文件成功!!"); }else{ NSLog(@"将student数组保存为属性列表文件不成功"); } } }
前往文件夹里面去看:
--
-------下一篇:从plist表中恢复student对象 点击打开链接