你的位置:首页 > 操作系统

[操作系统]IOS中将字典转成模型对象

作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 。有点像C#中解析

apps.plist的

 

<??><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array>  <dict>    <key>name</key>    <string>天天酷跑</string>    <key>icon</key>    <string>icon_00</string>  </dict>     <dict>    <key>name</key>    <string>保卫萝卜2</string>    <key>icon</key>    <string>icon_10</string>  </dict>  <dict>    <key>name</key>    <string>神偷奶爸</string>    <key>icon</key>    <string>icon_11</string>  </dict></array></plist>

从处理plist中的数据 并返回模型对象的数组
/** * 从处理plist中的数据 并返回模型对象的数组 * * @return NSArray *apps; */-(NSArray *) apps{  if (_apps==nil) {    // 过去plist的全路径    NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];    //加载数组    NSArray *dicArray=[NSArray arrayWithContentsOfFile:path];    //将dicArray里面的所有字典转成模型对象,放到新的数组中。    NSMutableArray *appArray=[NSMutableArray array];    for (NSDictionary *dict in dicArray) {      //创建模型对象                        /*      MyApp *app=[[MyApp alloc] initWithDict:dict];             [NSString stringWithFormat:<#(NSString *), ...#>];      [[NSString alloc] initWithFormat:<#(NSString *), ...#>];            [NSArray arrayWithContentsOfFile:<#(NSString *)#>]      [[NSArray alloc] initWithContentsOfFile:<#(NSString *)#>;       通过这里 我们需要提取一个appWith        一个命名规范的问题       */            MyApp *app=[MyApp appWithDict:dict];      //添加到对象到数组中      [appArray addObject:app];    }    //赋值    _apps=dicArray;      }  return _apps;}

 

 

自定义的MyApp类,和字典中做到一一对应 

#import <Foundation/Foundation.h>/** * copy :NSString  strong :一般对象  weak:UI控件  assign :基本数据类型 */@interface MyApp : NSObject/** * 图标 */@property (nonatomic,copy) NSString *icon;/** * 名称 */@property(nonatomic,copy) NSString *name;/** * 通过字典来初始化模型对象 * * @param dic 字典对象 * * @return 已经初始化完毕的模型对象 *//*instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!好处能够确定对象的类型,能够帮助编译器更好的为我们定位代码书写问题
instanchetype和id的对比1、相同点都可以作为方法的返回类型2、不同点①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;②instancetype只能作为返回值,不能像id那样作为参数,比如下面的写法:*/-(instancetype)initWithDict:(NSDictionary *)dict;+(instancetype) appWithDict:(NSDictionary *)dict;@end

 

 

@implementation MyApp-(instancetype)initWithDict:(NSDictionary *)dict{  if (self=[super init]) {    self.name=dict[@"name"];    self.icon=dict[@"icon"];  }  return self;}+(instancetype) appWithDict:(NSDictionary *)dict{    // 为何使用self,谁调用self方法 self就会指向谁!!  return [[self alloc] initWithDict:dict];  }@end

 


贵州旅游报价价格贵州旅游景点推荐贵州旅游团报价香格里拉在哪里_香格里拉在什么地方 三江自然湿地保护区在哪_地理位置 白水洋在哪里_白水洋在哪_白水洋在什么地方 稻城亚丁购物指南(图) 英国墓地分上下铺 水麻将你会打吗? 龙池曼漂流团购价格?嵩县龙池曼漂流门票团购优惠吗? 乐清到雁荡五虎山漂流有直达车吗?乐清到五虎山漂流怎么坐车? 富华水上皇宫需要带什么?潍坊富华游乐园水上皇宫要穿泳衣吗? 海南欢乐节举办几天?海南欢乐节几号到几号? 畅游武安古武当山 兔屎茶“解酒?各国闻所未闻的奇葩解酒法(全文) 40415 海南欢乐节去玩吗?第15届海南欢乐节优惠景点有哪些? 40416 海南欢乐节有什么好玩的?第十五届海南欢乐节节目介绍? 40417 “新世界7大奇观城市”出炉 黎巴嫩首都居首(全文) 40418 看奇幻魔界 听野人传说 40419 2015南京冰雪奇缘圣诞主题展举办时间、地点、门票以及活动详情怎么样? 40420 禁止使用硬币购物?世界八国最奇葩规定(全文) 40421 海南欢乐节有什么活动?2015海南欢乐节活动介绍? 4042 ZENER Semiconductor IPI60R380C6 Datasheet ZENER Semiconductor IPB60R380C6 Datasheet T356F156M020AS7301 Datasheet T356F226J0167301 Datasheet FKP3G012202C00MJ00 Datasheet FKP3G012202C00MMSD Datasheet 浙江比较好的旅游社 浙江比较好的旅游社 浙江比较好的旅游社 浙江避暑胜地 浙江避暑胜地 浙江避暑胜地