怎样从plist文件中读取数据,这个和反归档相似,但是也存在着区别,比如说不用解码,当然一般我们获取的数据往往是对一个对象的描述,而且数据的个数也不是一个,因此我们有必要来说一下怎样完整的从plist文件中获取数据,然后放最后以对象的形式放到数组中。
在这个地方我们通过一个例子来描述一下,怎样来完成这些操作。
第一步是创建一个类:
#import <Foundation/Foundation.h>
@interface App : NSObject
@property(nonatomic , copy) NSString *name ;
@property(nonatomic , copy) NSString *icon ;
-(instancetype)initWithName:(NSString *)name andIcon:(NSString *)icon ;
+(instancetype)appWithName:(NSString *)name andIcon:(NSString *)icon ;
@end
根据数据的属性来或获取一个对象:
然后在实现文件中实现这些类:
#import "App.h"
@implementation App
-(instancetype) initWithName:(NSString *)name andIcon:(NSString *)icon
{
if(self=[super init])
{
self.name=name;
self.icon=icon;
}
return self;
}
+(instancetype) appWithName:(NSString *)name andIcon:(NSString *)icon
{
return [[self alloc] initWithName:name andIcon:icon];
}
@end
实现之后我们要进行的操作是:
在ViewController.m这个文件写入这些代码:
#import "ViewController.h"
#import "App.h"
@interface ViewController ()
//现在我们做的都是为了获取文件
//我们在这个地方定义一个数组,为了是能够盛放所创建对象
@property(nonatomic,strong) NSMutableArray *apps;
@end
@implementation ViewController
//重写数组的get方法
-(NSMutableArray*)apps{
//首先是判断这个数组是不是为空
if(_apps==nil)
{
//在这个地方我们可以认为是创建给这个数组赋一个初值
_apps=[NSMutableArray array];
//获取文件,要知道的是这个文件的类型是一个字符串
NSString *file=[[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil];
//从文件中获取数据,这个从文件中获取了对象并且存储在一个数组中
NSArray *arr=[NSArray arrayWithContentsOfFile:file];
for(NSDictionary *dict in arr)
{
NSString *name=[dict valueForKey:@"name"];
NSString *icon=[dict valueForKey:@"icon"];
App *app=[[App alloc] initWithName:name andIcon:icon];
[_apps addObject:app];
}
}
return _apps;
}
最后我们返回的数组中也就有里里面也就是我们获取的对象。