一、接下来,我们要为大家演示如何通过加载plist文件,使用UITableView展示单组数据, 1.最后运行起来的效果,是一个什么效果呢,是这样一个效果: 2.这个里面,这就是一个单元格吧, 这就是一个单元格, 这个单元格里面,包括一个图片框、一个TextLabel、一个DetailLabel、一个指示器, 这个指示器的意思,告诉你说,这个是不是能点啊, 接下来,我们就给大家实现这么一个效果,手动加载plist文件,实现这么一个展示单组数据的效果, 3.新建一个项目,叫做“英雄展示”, 首先把我们的控制器,改成3.5英寸,模拟器也改成iPhone4S, 接下来,就是,我们要加载这个数据,既然我们要加载plist文件,首先是不是得有这个plist文件啊, 好,把我们这个plist文件,拖到项目中,SupportingFiles文件夹下, 这是我们的图片素材, 接下来,我们就把这两个素材都拷进来, 接下来,我们就来实现一下这个效果, 怎么实现呢,我们先观察一下这个plist文件,整体是个什么结构, 整体是一个Array吧,是一个数组,每一个元素是一个Dictionary吧,是一个字典, 来,打开第一个字典 第一个字典中,有几个键值对,3个吧,分别是 1)icon, 2)intro, 3)name, 第二个元素里面,也是icon、intro、name,三个键值对吧, 好了,我们观察了这个以后,接下来,就来进行懒加载了吧, 二、懒加载, 1.懒加载的时候,发现这里有字典,所以说,我们首先要干什么,是不是写一个模型啊,写一个模型,用来描述这个字典吧,再来就要把字典转模型, 所以还是第一步,创建模型,第二步,懒加载,先把这两步搞定, 2.创建模型, 这个模型是用来表示什么, 1)一个英雄的图片,icon 2)一个英雄的描述,intro 3)一个英雄的名称,name 这是表示一个英雄,所以这个模型就是一个英雄模型,先给它设置一个这个前缀CZ, 然后,这里我们给它创建一个英雄,hero, 然后,因为这个英雄字典里面有icon、intro、name,三个都是什么类型,String类型吧, 所以,我们这里给这个英雄模型,创建三个属性,icon、intro、name, intro,就是介绍吧,就是描述、简介 icon,就是头像, name,就是名字, 好,现在我们有这三个属性了吧,有属性以后,是不是要封装两个方法, 4.封装两个方法, - (instancetype)initWithDict:(NSDictionary *)dict; + (instancetype)heroWithDict:(NSDictionary *)dict; 然后呢,实现一下这两个方法, - (instancetype)initWithDict:(NSDictionary *)dict{ if(self = [super init]){ //如果,self,把super init这个值是不是赋值给这个self啊, } //然后,我们就return 这个self 吧, return self; } 我们说,在我们这个plist文件里,每一个元素,是不是就是一个字典啊, 所以说,我们这里,拿到这个以后,直接可以调setValuesForKeysWithDictionary, 是不是可以直接把字典中的每一个值是不是设置给那个模型啊, 所以可以直接把字典中的每一个元素设置给模型, 所以说,我们在这里,直接要什么啊, - (instancetype)initWithDict:(NSDictionary *)dict{ if(self = [super init]){ [self setValuesForKeysWithDictionary:dict]; } } 直接这么做,是不是就OK了, 这样的话,我们这个方法,就封装好了,然后再封装另外一个类的方法,加号,叫什么, + (instancetype)heroWithDict:(NSDictionary *)dict{ return [[self alloc] initWithDict:dict]; } 这样的话,我们这两个方法,是不是就封装好了, 2.好,然后进行懒加载,我们说,这个里面保存的每一个元素,就是一个英雄吧,每一个就是一个一个英雄,所以说,我们整体应该是一个英雄的集合, 英雄的集合,所以这个名字该怎么起? @property(nonatomic,strong)NSArray *…… 英雄的集合,所以这个名字该叫什么, 应该叫heros吧, //保存英雄的集合 @property(nonatomic,strong)NSArray *heros; 有了这个以后,接下来,我们就是开