Plist文件操作:4-操作实例
本节内容通过一个实际的案例,介绍一下基于Plist文件的数据持久化方案。该案例可以通过前端的界面输入数据,并保存到Plist文件中,同时可以读取Plist文件中保存的数据。
前端UI界面准备工作
按照下图所示搭建UI界面,添加2个label,2个TextField,2个按钮
建立控件与控制器之间的连线。将2个TextField,2个按钮与ViewController建立连线。两个输入框分别用于获取用户输入的内容,而两个按钮分别用于Plist文件的存取操作。
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;
@property (weak, nonatomic) IBOutlet UITextField *ageTextField;
@end
- (IBAction)writeToPlist:(id)sender {
}
- (IBAction)readFromPlist:(id)sender {
}
创建模型Model
在实际的开发中,苹果官方推荐采用MVC设计模式,因此我们预先创建一个数据模型类来管理数据。
- 创建一个Person类,其中包含姓名name以及年龄age两个属性
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSNumber *age;
@end
- 由于Plist文件中只能保存Foundation框架中定义的NSString、NSDictionary以及NSArray等类型的数据,而不能保存对象,所以我们需要在Person.h中添加一个类方法,通过该方法可以把Plist文件中保存的数据转换成对象。
+(instancetype) personWithDict:(NSDictionary *) dict;
- 在Person.m中实现personWithDict:方法的功能
+(instancetype) personWithDict:(NSDictionary *)dict{
Person *person = [[Person alloc] init];
person.name = dict[@"name"];
person.age = dict[@"age"];
return person;
}
创建用于Plist操作的Service类
为了便于对Plist文件进行读写操作,我们单独创建一个Service类,专门用于读写Plist文件。其中主要包括如下几个方法。
- 在Service.h文件中添加两个方法,分别用于写入新增数据以及读取所有联系人
-(void) addPersonWithDict:(NSDictionary *) dict;
-(NSArray *) readAllPerson;
- 在Service.m文件中,实现上述方法的功能
/*获取plist文件的路径*/
-(NSString *) personPlistFilePath {
NSArray *documentArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [documentArray firstObject];
NSString *personPlistFilePath = [documentPath stringByAppendingPathComponent:@"person.plist"];
return personPlistFilePath;
}
-(void)addPersonWithDict:(NSDictionary *) dict{
//获取Plist文件路径
NSString *plistPath = [self personPlistFilePath];
//检查Plist文件是否存在
NSFileManager *fileManager= [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:plistPath]) { //文件不存在,则创建
[fileManager createFileAtPath:plistPath contents:nil attributes:nil];
}
//读取Plist中的文件
NSMutableArray *personArrayM = [NSMutableArray arrayWithContentsOfFile:plistPath];
//判断arrayM是否为空,为空则创建
if (personArrayM == nil) {
personArrayM = [NSMutableArray array];
}
//传入的dict插入数组中
[personArrayM addObject:dict];
//写入文件
[personArrayM writeToFile:plistPath atomically:YES];
}
-(NSArray *)readAllPerson{
//获取Plist文件路径
NSString *plistPath = [self personPlistFilePath];
//读取Plist文件
NSArray *personArray = [NSArray arrayWithContentsOfFile:plistPath];
return personArray;
}
实现写入功能
- 在ViewController.m文件中,实现写入Plist文件的功能
- (IBAction)writeToPlist:(id)sender {
//NSString转NSNumber
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
NSNumber *age = [formatter numberFromString:dict[@"age"]];
//创建Dictionary
NSDictionary *personItemDict = @{
@"name": self.nameTextField.text,
@"age": age,
};
//写入Plist文件
[[[Service alloc] init] addPersonWithDict:personItemDict];
}
- 运行程序后,输入姓名和年龄,点击按钮【写入Plist】,则输入的数据被写入Plist文件中。注意:可以多次写入不同的数据。
- 在Finder中查找应用的沙盒,打开person.plist文件,可以查看已经插入的数据。
实现读取功能
- 在ViewController.m文件中,实现读取Plist文件的功能
- (IBAction)readFromPlist:(id)sender {
NSArray *personArray = [[[Service alloc] init] readAllPerson];
for (NSDictionary *dict in personArray) {
Person *person = [Person personWithDict:dict];
NSLog(@"%@,%@",person.name, person.age);
}
}
- 可以打印出来之前写入Plist文件的数据
示例代码
https://github.com/99ios/13.2.4
文章发布时间为: November 4th , 2016 at 11:18 am
最后编辑时间为: September 15th , 2017 at 05:22 am
本文由 99ios 创作,转载请注明出处
最后编辑时间为: September 15th , 2017 at 05:22 am
本文由 99ios 创作,转载请注明出处