首页 > 学院 > 开发设计 > 正文

IOS中将字典转成模型对象

2019-11-14 19:13:53
字体:
来源:转载
供稿:网友

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

apps.plist的xml数据是这样的

 

<?xml version="1.0" encoding="UTF-8"?><!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

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表