在iOS开发时,经常用到plist文件, 它的全名是:Property List,属性列表文件。这一种用来存储串行化后的对象的文件,该文件的扩展名为plist,因此通常被称为plist文件,其实质是xml文件。
plist文件通常用于存储各种数据。如下图所示,该plist保存了10条数据,该数据是一个NSDictionary,它包含3个属性(键值对)以及一个数组。
如果用代码读取一条数据,需要获得这个NSDictionary,再依次读取键值对。代码如下。
1 name = dict[@"answer"]; 2 imageView.image = [UIImage imageNamed:dict[@"icon"]]; 3 label.text = dict[@"title"]; 4 options = dict[@"options"];
在面向对象的开发过程中,一般将数据映射成对象(ORM)。ORM模型了提供了简化的数据查询方式,具体到iOS开发,可以将plist文件中的NSDictionary数据映射成一个对象,其键值对就是对象的属性。该对象的定义如下。
@interface CsyQuestionModel : NSObject @property (copy,nonatomic) NSString *answer; @property (copy,nonatomic) NSString *icon; @property (copy,nonatomic) NSString *title; @property (strong,nonatomic) NSArray *options; - (instancetype)initWithDictionary:(NSDictionary *)dict; + (instancetype)initWithDictionary:(NSDictionary *)dict; @end
需要注意的是,该对象提供了两个快速构造方法。instancetype是iOS7引入的关键字,它和id一样,可以表示任何类型,其作用是让编译器检查赋值对象的类型,如果不是CsyQuestionModel类型,则会给出警告。它只能用于返回类型,不能用于参数类型。该对象的实现如下。
1 @implementation CsyQuestionModel 2 3 - (instancetype)initWithDictionary:(NSDictionary *)dict 4 { 5 self = [super init]; 6 7 if (self) { 8 [self setValuesForKeysWithDictionary:dict]; 9 10 } 11 12 return self; 13 } 14 15 + (instancetype)initWithDictionary:(NSDictionary *)dict 16 { 17 return [[CsyQuestionModel alloc] initWithDictionary:dict]; 18 } 19 20 @end